Firmar commits de Git para Github

Publicado

Para firmar los commits de git se necesita una llave gpg, la utilería gpg ya viene instalada por defecto en Ubuntu 22.04, en Windows está disponible en GitBash al instalar Git.

Inicia el proceso de creación de nueva llave:

gpg --full-generate-key

Preguntará tipo de llave a generar, tamaño y fecha de expiración, yo dejé los predeterminados: RSA & RSA, 3072 bits y sin expiración. Al confirmar pide ahora nombre y correo, si tienes una cuenta Github, puedes usar la dirección noreply que este ofrece.

En mi caso, no me dejó usar mi usuario en la parte de nombre porque pide al menos 5 letras, así que puse uno de mis nombres, el correo es suficiente para que Github haga la verificación del commit.

Al confirmar, el último paso es proporcionar una frase de paso (passphrase) para la nueva llave, esta se pedirá en cada commit.

Al generarse saldrá algo parecido a esto:

sec   rsa3072/BCADF9277ACE15E3 2024-03-19 [SC]
      09CEC301E66598141105041EBCADF8377ACE55C3
uid                 [ultimate] Obama <12541245+obama@users.noreply.github.com>
ssb   rsa3072/B4F9882D1927F551 2024-03-19 [E]

Es necesario exportar la llave pública y dársela a Github para que este pueda hacer la verificación.

Primero lista tus llaves actuales con:

gpg --list-secret-keys --keyid-format=long

Copia el id, para esta salida, el id es 3AA5C34371567BD2:

sec   4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10]
uid                          Obama <12541245+obama@users.noreply.github.com>
ssb   4096R/4BB6D45482678BE3 2016-03-10

Exporta la llave utilizando el id de la llave:

gpg --armor --export 3AA5C34371567BD2

En Github ve a Configuración -> Llaves SSH y GPG -> Nueva llave GPG, inserta la salida del comando anterior y guarda, desde -----BEGIN PGP PUBLIC KEY BLOCK----- hasta -----END PGP PUBLIC KEY BLOCK-----.

Ahora en tus commit que quieras firmar, agrega la bandera -S, recuerda que se pedirá la frase de paso.

git commit -S -m "YOUR_COMMIT_MESSAGE"

El nombre y correo del autor deben coincidir con los de la llave GPG, de lo contrario te dirá que no encuentra la llave, puedes configurarlos con:

git config user.name "Obama"
git config user.email obama@example.com

Al hacer push del repositorio, en Github aparecerá la etiqueta de Verificado junto a cada commit.

Verified commit