Trabalhando com assinaturas de commits utilizando GPG.

“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-keysSe 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-keyVocê será perguntado sobre as seguintes coisas:





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 XXXXXXXXNo 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:

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:

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 --exportPor 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.pubEsse 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.pubAgora vamos verificar se a chave em questão foi importada com sucesso usando o comando:
gpg --list-keysVocê 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.0O 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.

