Assinando commits com uma chave GPG
Tags: security, git, github
Published: 2020-12-17 16:16:02

O Git tem a opção de assinar e verificar seus commits utilizando-se de chave GPG, para isso basta seguir os passos a seguir

#### Passo 1 - Gere uma nova chave GPG

1 - Digite o comando para gerar a chave GPG;
```
gpg --full-generate-key
```

2 - Selecione a opção: (1) RSA e RSA (padrão);
```
gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Por favor selecione o tipo de chave desejado:
   (1) RSA e RSA (padrão)
   (2) DSA e Elgamal
   (3) DSA (apenas assinatura)
   (4) RSA (apenas assinar)
Sua opção? 
```

3 - Digite o maior comprimento(4096), para sua nova chave GPG;
```
RSA chaves podem ter o seu comprimento entre 1024 e 4096 bits.
Que tamanho de chave você quer? (3072) 4096
```

4 - Decida qual o prazo de expiração para sua chave;
```
Por favor especifique por quanto tempo a chave deve ser válida.
         0 = chave não expira
      <n>  = chave expira em n dias
      <n>w = chave expira em n semanas
      <n>m = chave expira em n meses
      <n>y = chave expira em n anos
A chave é valida por? (0) 
```

5 - Confirme o tempo de expiração da chave;
```
A chave não expira nunca
Está correto (s/N)?
```

6 - Digite seu nome completo;
```
GnuPG precisa construir uma ID de usuário para identificar sua chave.

Nome completo: 
```

7 - Digite seu email;
```
Endereço de correio eletrônico:
```

8 - Crie um comentário para sua chave caso seja necessário;
```
Comentário: 
```

9 - Confirme as informações que você acabou de preencher, basta digitar o para OK;
```
Você selecionou este identificador de usuário:
    "Joao Ninguem <joao@ninguem.nada>"

Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air?
```

10 - Digite uma senha segura para sua chave GPG e confirme a senha;

11 - Aguarde o processo de criação de sua chave finalizar;
```
Precisamos gerar muitos bytes aleatórios. É uma boa idéia realizar outra
atividade (digitar no teclado, mover o mouse, usar os discos) durante a
geração dos números primos; isso dá ao gerador de números aleatórios
uma chance melhor de conseguir entropia suficiente.
gpg: chave FD2B172CC4C9F3E4 marcada como plenamente confiável
gpg: revocation certificate stored as '/home/geekcom/.gnupg/openpgp-revocs.d/92518C10D23E004325112DB9FD2B172CC4C9F3E4.rev'
chaves pública e privada criadas e assinadas.

pub   rsa4096 2020-04-28 [SC]
      92518C10D23E004325112DB9FD2B172CC4C9F3E4
uid                      Joao Ninguem <joao@ninguem.nada>
sub   rsa4096 2020-04-28 [E]
```

Neste momento sua chave GPG foi gerado com sucesso, agora é necessário adiciona-la ao GitHub.

#### Passo 2 - Adicionando uma chave GPG ao GitHub

1 - Use o seguinte comando para listar a chave GPG privada que você acabou de criar:
```
gpg --list-secret-keys --keyid-format LONG joao@ninguem.nada
```
Substitua `joao@ninguem.nada` pelo e-mail que você usou para criar a chave.

2 - Copie o ID da chave GPG que começa com sec. No exemplo a seguir, é FD2B172CC4C9F3E4:
```
sec   rsa4096/FD2B172CC4C9F3E4 2020-04-28 [SC]
      92518C10D23E004325112DB9FD2B172CC4C9F3E4
uid                 [final] Joao Ninguem <joao@ninguem.nada>
ssb   rsa4096/AB9EC40EA9DE16E3 2020-04-28 [E]
```

3 - Exporte a chave pública desse ID (substitua pelo seu ID da chave da etapa anterior):
```
gpg --armor --export FD2B172CC4C9F3E4
```

4 - Por fim, copie a chave pública e adicione-a nas configurações do seu perfil do GitHub em `https://github.com/settings/keys`

#### Passo 3 - Associando sua chave GPG ao Git

1 -  Depois de criar sua chave GPG e adicioná-la à sua conta GitLab, é hora de informar ao Git qual chave usar.
```
gpg --list-secret-keys --keyid-format LONG joao@ninguem.nada
```
Substitua `joao@ninguem.nada` pelo seu email.

2 - Copie o ID da chave GPG que começa com sec. No exemplo a seguir, é FD2B172CC4C9F3E4:
```
sec   rsa4096/FD2B172CC4C9F3E4 2020-04-28 [SC]
      92518C10D23E004325112DB9FD2B172CC4C9F3E4
uid                 [final] Joao Ninguem <joao@ninguem.nada>
ssb   rsa4096/AB9EC40EA9DE16E3 2020-04-28 [E]
```

3 - Diga ao Git que deseja usar essa chave para assinar os seus commits:
```
git config --global user.signingkey FD2B172CC4C9F3E4
```
Substitua FD2B172CC4C9F3E4 pelo ID da sua chave GPG.

#### Passo 4 - Assinando commits com sua chave GPG
Depois de criar sua chave GPG e adicioná-la à sua conta, você pode começar a assinar seus commits:

1 - Continua como você costumava fazer, a única diferença é a adição da flag -S:
```
git commit -S -m "mensagem do meu commit"
```
2 - Digite a senha da sua chave GPG quando solicitada.

A partir de agora seus commits podem assinados com sua chave GPG sempre que desejar, no GitHub você poderá ver que seus commits estão assinados.