Trabalhando com assinaturas de commits utilizando GPG.

Igor Souza
Jul 30, 2017 · 4 min read

“GNU Privacy Guard(GnuPG or GPG) é uma alternativa GPL de criptografia ao PGP. GnuPG é compatível com a RFC 4880, o padrão da IETF para a especificação do OpenPGP.”

Especificamente no nosso caso, utilizaremos o GPG para assinar commits e tags, com isso, qualquer pessoa com acesso ao repositório e a nossa chave publica poderá verificar se realmente fomos nós que fizemos o commit ou criamos determinada tag.

Num próximo post falaremos sobre como as assinaturas, principalmente de tags, são importantes em nosso fluxo de deploy.

Para começar, vamos verificar se existe alguma chave criada em nossa máquina. Para isso, use o seguinte comando:

gpg --list-keys

Se você já possuir alguma chave, vai aparecer algo como na imagem abaixo:

Caso tenha uma chave que você não reconheça, é recomendado que apague a mesma.

Configurando nossa chave

Agora vamos seguir com a criação da nossa própria chave.

gpg --gen-key

Você será perguntado sobre as seguintes coisas:

“Qual o tipo de chave” : Escolha a opção 1 (default)
“O tamanho da sua chave” : vamos colocar 4096.
“Por quanto tempo a chave será válida?”
O comentário é bom caso você tenha muitas chaves, facilita saber qual é usada para determinada org.
Agora vamos criar uma senha para nossa assinatura.

Lembre-se que precisará dessa senha para assinar os commits, então mantenha-a em algum lugar seguro e por favor não utilize a mesma senha em diversos serviços.

Em seguida a chave será gerada, é só aguardar alguns segundos.
Se tudo ocorrer bem, uma tela parecida com essa será mostrada.

Agora precisamos configurar o git para que ele saiba que chave utilizar quando pedirmos para assinar determinada tag. Para isso basta fazer o seguinte:

git config --global user.signinkey XXXXXXXX

No meu caso, o XXXXXX será substituído por 227AB8FB.

Assim seu git estará configurado e pronto para assinar suas tags/commits. O comando para criar uma tag é o seguinte:

git tag v2.0.0 -s -m “mensagem da tag”

Caso alguma coisa dê errado, abra o arquivo de configuração do git e verifique se o seu nome esta exatamente igual o que você passou no passo anterior acrescentado do comentário. No meu caso ficou assim:

Se quiser dar uma olhada nos logs exibindo as chaves, basta digitar:

git verify-tag v2.0.0

Tudo certo, vamos fazer o push da nossa tag para o servidor.

Exportando sua chave pública

Agora que você já sabe assinar seus commits/tags, vamos compartilhar nossa chave com outras pessoas para que elas consigam saber quando realmente fomos nós que assinamos algo.

A primeira coisa a se fazer é conhecer o seguinte comando:

gpg --export

Por padrão esse comando vai exportar todas as suas chaves para o STDOUT, o que não faz muito sentido pra gente no momento. Queremos que essa saída vá para um arquivo, e isso a gente consegue de forma simples com:

gpg --export -o my_key_file.pub

Esse comando vai gerar o arquivo my_key_file.pub com o conteúdo da chave. Agora pegue esse arquivo e compartilhe da maneira que achar melhor. Caso você faça parte de alguma organização no github, uma solução seria criar um repositório privado onde todos da equipe possam colocar suas chaves. Assim, se um dia alguém precisar validar a chave de outra pessoa basta ter acesso a esse repositório e importar a chave da forma que explicarei a seguir.

Importando chaves GPG

Assim como existe o comando export, existe o comando import. Tudo que precisa é ter o arquivo com a chave de outra pessoa. Se quiser testar com o meu basta pegá-lo aqui .

gpg --import someone_key_file.pub

Agora vamos verificar se a chave em questão foi importada com sucesso usando o comando:

gpg --list-keys

Você deve estar vendo uma lista de chaves, pelo menos duas, a sua e a importada. Vamos agora validar uma assinatura. No caso de estar testando com a minha chave, faça um clone da minha pagina. Em seguida tente verificar alguma tag. No momento que estou escrevendo esse texto existe apenas a v1.0.0.

git verify-tag v1.0.0

O retorno deverá ser algo parecido com a seguinte imagem:

Foco na última linha “Good signature from …”, é nela que saberemos exatamente com qual chave essa tag foi validada, no caso de termos várias importadas.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade