Como segurança nunca é demais, vamos aprender como assinar nossos commits usando chaves GPG para garantir a integridade e confiabilidade do autor.
Instalando GPG no Windows
Para facilitar a criação das nossas chaves, podemos instalar um cli chamado gnupg.
Gerando uma nova chave GPG
O GitHub, GitLab e Azure Devops suportam vários formatos de chaves, tais como:
- RSA
- ElGamal
- DSA
- ECDH
- ECDSA
- EdDSA
Feita a instalação do gnupg na versão 2.1.17+, execute o comando:
gpg --full-generate-key
Especifique qual tipo de chave deseja gerar, seu tamanho e o tempo de validade, nome de usuário, e-mail e senha de criptografia.
Atente-se ao fato de que o e-mail informado deve ser o mesmo utilizado no GitHub e etc.
Liste as chaves armazenadas e copie o ID da chave que desejada:
O ID é o código 3AA5C34371567BD2, como no exemplo abaixo.
gpg --list-secret-keys --keyid-format=long
$ gpg --list-secret-keys --keyid-format=long
/Users/marks/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2024-02-20 [expires: 2024-03-20]
uid Marks <marks@example.com>
ssb 4096R/4BB6D45482678BE3 2024-02-20
Passe o ID copiado como parâmetro do comando que imprime a chave pública que deverá ser informada no GitHub:
gpg --armor --export 3AA5C34371567BD2
# Imprime a chave GPG em formato ASCII
Copie todo o texto começando com
-----BEGIN PGP PUBLIC KEY BLOCK-----
e terminando com
----END PGP PUBLIC KEY BLOCK-----
.
Agora acesse sua conta no github, vá até configurações > SSH and GPG keys
e adicione a chave ASCII gerada.
Configurando o GIT
Antes de configurar o git, vamos garantir que não exista um formato de assinatura previamente informado.
git config --global --unset gpg.format
Agora podemos configurá-lo para assinar nossos commits de forma global ou local:
git config --global user.signingkey 3AA5C34371567BD2
git config --local user.signingkey 3AA5C34371567BD2
Lembre-se de copiar o ID da chave ou listar novamente com
gpg --list-secret-keys --keyid-format=long
Agora faça um commit assinado com o comando:
git commit -S -m "message"
Opcionalmente, podemos configurar o Git para assinar todos os commits por padrão, com o comando: git config --global commit.gpgsign true
Caso ocorra o erro signing failed: No secret key, informe para o git o path do gpg instalado:
gpgconf
gpg:OpenPGP:C%3a\Program Files (x86)\gnupg\bin\gpg.exe
gpgsm:S/MIME:C%3a\Program Files (x86)\gnupg\bin\gpgsm.exe
keyboxd:Public Keys:C%3a\Program Files (x86)\gnupg\bin\keyboxd.exe
gpg-agent:Private Keys:C%3a\Program Files (x86)\gnupg\bin\gpg-agent.exe
scdaemon:Smartcards:C%3a\Program Files (x86)\gnupg\bin\scdaemon.exe
dirmngr:Network:C%3a\Program Files (x86)\gnupg\bin\dirmngr.exe
pinentry:Passphrase Entry:C%3a\Program Files (x86)\gnupg\bin\pinentry-basic.exe
git config --global gpg.program "C:\Program Files (x86)\gnupg\bin\gpg.exe"
Agradeço a leitura e até a próxima. 😎
Top comments (0)