Firmando commits en git
Para poder firmar los commits que realizamos y aumentar la seguridad al momento de realizar cambios en un repositorio, podemos utilizar una clave GPG.
Una vez instalado GPG con una versión +2.1.17
, ejecutamos el comando siguiente para crear nuestra clave.
gpg --full-generate-key
gpg --full-generate-key
El comando realizará una serie de preguntas para configurar el algoritmo a utilizar. Actualmente se recomienda utilizar el algoritmo EdDSA que utiliza la curva elíptica de Edwards con el esquema Ed25519. Nota: si utilizará la clave para firmar en Github es importante que utilice el correo electrónico con el que se verificó la cuenta. En caso de no querer exponer su correo electrónico, está la posibilidad de utilizar un correo no-reply
que GitHub provee en las [configuraciones de la cuenta](https://github.com/settings/emails.
Una vez creada e insertada la clave para resguardar la firma, puede consultar la misma con el siguiente comando:
$ gpg --list-secret-keys --keyid-format=long
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid Hubot <[email protected]m>
ssb 4096R/4BB6D45482678BE3 2016-03-10
$ gpg --list-secret-keys --keyid-format=long
/Users/hubot/.gnupg/secring.gpg
------------------------------------
sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid Hubot <[email protected]m>
ssb 4096R/4BB6D45482678BE3 2016-03-10
De la siguiente forma podemos exportar la clave pública para importarla en donde queramos
gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format
gpg --armor --export 3AA5C34371567BD2
# Prints the GPG key ID, in ASCII armor format
Puede probar firmar un mensaje de la siguiente manera:
echo "test" | gpg --clearsign
echo "test" | gpg --clearsign
Configurar git
Para firmar un commit con git, primero debemos configurarlo. Para indicar que deberá usar la firma debemos indicar cuál ID se usará y activar una configuración:
git config --global user.signingkey 3AA5C34371567BD2
git config --global user.signingkey 3AA5C34371567BD2
Activamos la firma via GPG
git config --global commit.gpgsign true
git config --global commit.gpgsign true
Al momento de hacer el commit podemos indicar firmarlo con el parámetro -S:
git commit -S -m 'comment'
git commit -S -m 'comment'
Si falla, puede intentar agregar a su bashrc
o zshrc
la siguiente variable de entorno:
export GPG_TTY=$(tty)
export GPG_TTY=$(tty)
Pinentry MacOS
En el caso de MacOS puede instalar pinentry-mac
para ingresar la clave mediante una GUI.
brew install pinentry-mac
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent
brew install pinentry-mac
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent
Desde la terminal es suficiente con poseer pinentry
.