Assinatura de commits
Tags: git, github, gnupg, linux
Published: 2022-06-17 22:42:42

Como conseguimos garantir que somos nós mesmos que fazemos os commits?!

Qualquer pessoa pode alterar a configuração do git, colocar seu e-mail e dizer que foi você que subiu aquele commit.

Para assinar commits, iremos ver o GNUPG.

Nesse link: [gnupg](https://www.gnupg.org/) vemos que GNUPG é The GNU Privacy Guard.

É uma implementação completa e gratuita do padrão OpenPGP conforme definido pelo RFC4880 (também conhecido como PGP. O GnuPG permite criptografar e assinar dados e comunicações; possui um sistema de gerenciamento de chaves versátil, juntamente com módulos de acesso para todos os tipos de diretórios de chaves públicas. GnuPG, também conhecido como GPG, é uma ferramenta de linha de comando com recursos para facilitar a integração com outros aplicativos. O GnuPG também oferece suporte para S/MIME e Secure Shell (ssh).

Instalação no linux
```
sudo apt update 
sudo apt install gnupg
```

Iremos verificar se existe alguma chave criada no nosso computador.

```
gpg --list-secret-key --keyid-form LONG
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p9r4xdpy6lm6w6kmgjsc.png)


Vamos criar a nossa chave 

```
gpg --full-generate-key
```

1. Selecionamos (1) para usarmos RSA
2. 4096 bits long
3. y
4. quanto tempo quer que seja valido a chave: 1y
5. y
6. Real name: seu nome
   Email address: seuemail@mail.com
7. selecionar O para salvar e sair.
8. criar uma senha no seu computador para ter acesso a chave.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jpa7tivk4mz2hq21mel6.png)

Iremos verificar a chave criada.

```
gpg --list-secret-key --keyid-form LONG
```

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s4ffky2xed8lfh3kiqh5.png)

Com esse retorno:

```
sec   rsa4096/1F64329A378F71EE 2022-06-17 [SC] [expires: 2023-06-17]
      8EF31698FB71ACAC945C4A3E1F64329A378F71EE
uid                 [ultimate] William Koller <williamkoller404@gmail.com>
ssb   rsa4096/43D2BB51F0668C4B 2022-06-17 [E] [expires: 2023-06-17]
```

Iremos copiar o sec => `1F64329A378F71EE` que é o id para pegarmos a chave publica e adicionar no github.


```
 gpg --armor --export 1F64329A378F71EE
```

Pegamos a chave e adicionamos no github em GPG Keys


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tjbtgcp37arf58cqit7z.png)

Agora iremos configurar o git para assinar commit e tags

```
git config --global commit.gpgsign true
git config --global tag.gpgSign true
```

Criei esse projeto no github para exemplificar


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ix8aj4jxhe0hs0kzx8xb.png)

Precisamos adicionar a nossa chave no git

```
git config --global user.signingkey 1F64329A378F71EE
```

Quando formos commitar irá aparece essa tela para confirmamos a senha


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a9vgyaktertug312wlg.png)

Agora iremos verificar se o git esta vinculado ao nosso commit

```
git log --show-signature -1
```


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2ww24b3l6b6sd2dc7trl.png)

Vamos no repositorio verificar se o usuário está verificado, clicamos hash do commit.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/piplfcwwqsz1g5gj65k7.png)

Ultimo passo

```
sudo nano ~/.gnupg/gpg.conf
```
E adicionar `use-agent` e salvar e em seguida roda esse comando`gpgconf --launch gpg-agent`

Pronto agora temos a verificação de assinatura de commits.

Espero ter ajudado.