Git & Github: Começando com assinatura de commits
Tags: webdev, git, devops, beginners
Published: 2023-05-04 12:23:50

## Problema de não assinar commits

Quando começamos a trabalhar com git, a primeira coisa básica, além de instalar, é começarmos uma série de comandos para dizer quem somos nós.

```shell
git config --global user.name "Matheus Poda"
git config --global user.email mpoda@example.com

```

Essas informações que passamos é utilizada quando realizamos commit do nosso código, dessa forma, sempre estará aparecendo seu nome e dados, para mostrar quem foi o responsável por realizar um commit no repositório.

Porém, é comum burlar esses dados que passamos, quando estamos trabalhando em projetos de larga escala com diversas equipes ou até mesmo uma equipe pequena.

Qualquer pessoa na equipe, pode alterar as configurações que vimos acima e colocar você ou outra pessoa, que não é responsável pelo commit, e realizar essa ação e isso pode acabar se tornando um problema de segurança.

Por conta dessa possível "fraude" de autor de commit, que podemos utilizar uma forma ainda mais segura de trabalhar com Git e a plataforma de repositórios (GitHub, Bitbucket e etc), essa forma é assinando digitalmente nossos commits.

Nesse breve tópico, vou estar ensinando o básico de como gerar uma assinatura e assinar commits direto no GitHub!

---

## Instalação no Windows

O primeiro passo para começar a assinar seus commits, é de fato, criar a assinatura, que é um processo de segurança, já que é feito através de chaves (_Tokens_) criptografadas.

Para criar essa chave, iremos utilizar o sistema GPG (GNU PG), que praticamente é um software open-source que trás a mesma ideia do PGP (Pretty Good Privacy), que no caso é pago. Esse software nos permite criar chaves criptografadas para uso.

Nesse tópico, estarei utilizando o sistema operacional Windows, porém vou deixar mais a baixo alguns links de referência para usuários linux/mac se guiarem, normalmente o gpg nesses sistemas, já vem pré-instalado, porém no Windows é preciso instalar.

Para realizar a instalação, você deve baixar o [gpg4win](https://www.gpg4win.org/get-gpg4win.html), nele vem outro sistema de criptografia junto, o Kleopatra, que pode ser útil no futuro.


![Configuração GPG4WIN](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iqvnv5xgn5ngg664b14u.png)


Alguns tutoriais para instalação e teste do GPG nos sistemas linux/mac:

* https://gist.github.com/ankurk91/c4f0e23d76ef868b139f3c28bde057fc
* https://www.guiafoca.org/guiaonline/seguranca/ch07s11.html

---

## Criando sua chave GPG

Tendo o gpg funcional em seu terminal de preferência, vamos começar a parte de criação da chave.

O primeiro comando útil de saber é o relacionado a listar nossas chaves:

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

Para criarmos uma chave, usaremos o seguinte comando:

` gpg --full-generate-key `

![Terminal com o comando rodando](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0b92zlf5d2wg2ucp690h.png)

Ele irá te fazer três perguntas, para o tipo de Key, recomendo utilizar o RSA e colocar 4096 bits, também irá pedir o tempo de duração da chave e por fim irá pedir seu nome e senha (**IMPORTANTE: Lembre-se de colocar o mesmo nome e e-mail que seu git config**).

Ele irá pedir também uma senha para você dar a chave que está criando, então não esqueça de colocar e anotar.


---

## Adicionado sua chave ao GIT

O primeiro passo é você obter o id da chave gerada, basta usar o comando que apresentei, você irá ver algo como:

![Exemplo chave](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dfygnau4m99zdw5p02bo.png)

Para adicionar a assinatura que você acabou de ver pelo comando de listagem, utilizaremos o seguinte comando

` git config --global user.signingkey xxxx`

**xxx **-> sua chave

Além disso, precisamos deixar claro que iremos querer assinar nossos commits a partir de agora com a chave gerada:

`git config --local commit.gpgsign true`

**Lembrando que no comando, --local apenas no diretório que você está seu commit será assinado se quiser que sempre seja, independente do repositório (o que não indico), basta colocar --global.**

---

## Adicionando chave no GitHub

Para adicionar no github, você precisará da chave pública, obteremos através do seguinte comando: 
`gpg --armor --export`

Ele irá gerar uma sequência de caracteres gigante, você irá copiar do "--BEGIN PGP PUBLIC KEY BLOCK" até o "END PGP KEY BLOCK", incluindo esses caracteres.

Tendo eles em mãos, iremos entrar no github e ir até os settings, selecionar "SSH and GPG Keys" e iremos clicar no botão "New GPG Key", lá você deverá colar o que copiou lá no terminal.


![Key no github](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehkl9ab9mqjzu2cu2ki6.png)

---

## Realizando um commit assinado

Agora com tudo configurado e já tendo uma chave vinculada ao GitHub e no seu Git, realizaremos um commit assinado.

Primeiro, vou criar um repositório para realizarmos um commit:


![GitHub Repository](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59sfzrwvnaya3flztbqv.png)


![Diretório do projeto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fndrcmksu6syhtxushqa.png)

Vou criar um arquivo index.html, para realizar um commit:

![Arquivo index.html](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k3cayu4c3g8nqko864dt.png)

Agora vamos realizar o commit assinado:

1- Vou estar ativando a configuração para obrigar assinatura nesse repositório:

![Ativando assinatura no repo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lso42tb88641ftwcsaqy.png)

2- Realizar o commit assinado:

` git commit -S -m "First Commit!" `

Colocamos o **-S** para dizer que é assinado, e posteriormente ele irá abrir a tela para colocar a senha que criamos quando geramos a chave.

3- Verificando no GitHub:

![Commit assinado](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvpt0vz1y7r0cx3zrskm.png)

Como podemos ver, ao lado do commit que realizamos está com a tag 'verified', que demonstra que foi de fato assinado.

![Verified Commit](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyhqnu8pa0b6mquhh0fq.png)


Espero que tenha sido claro e agora você irá assinar seus commits e ter um projeto ainda mais seguro!!

Se você curtiu, não esqueça de salvar esse artigo e compartilhar com o pessoal da sua equipe! 

Obrigado pelo seu tempo.

---

## Referências

* https://www.git-tower.com/blog/setting-up-gpg-windows/
* https://codex.so/gpg-verification-github
* https://docs.github.com/pt/authentication/managing-commit-signature-verification/signing-commits