Llaves GPG en GitHub y GitLab🔗

Tomando en cuenta el funcionamiento de GitHub, GitLab, gpg2 y gpg-agent se puede asociar una llave GPG al correo electrónico privado ofrecido por GitHub y GitLab para la verificación de los commits.

Los correos electrónicos privados se obtienen de https://github.com/settings/emails y https://gitlab.com/profile.

Suponiendo que los correos electrónicos sean 123456-nihilipster@users.noreply.github.com y 654321-nihilipster@users.noreply.gitlab.com, se pueden generar las llaves GPG de la siguiente manera:

Para GitHub, mediante el algoritmo RSA:

[nihilipster@localhost:~]$ /usr/bin/gpg2 --full-generate-key
Your selection? 1
What keysize do you want? (2048) 4096
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
Real name: Nihilipster
Email address: 123456-nihilipster@users.noreply.github.com
Comment: 123456-nihilipster@users.noreply.github.com

Para GitLab, mediante el algoritmo RSA:

[nihilipster@localhost:~]$ /usr/bin/gpg2 --full-generate-key
Your selection? 1
What keysize do you want? (2048) 4096
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
Real name: Nihilipster
Email address: 654321-nihilipster@users.noreply.gitlab.com
Comment: 654321-nihilipster@users.noreply.gitlab.com

Para listar las llaves GPG y obtener su ID:

[nihilipster@localhost:~]$ /usr/bin/gpg2 --list-keys --keyid-format LONG
---------------------------------------
pub   rsa4096/12345678abcdefgh ... [SC]
      ...
uid                 [ultimate] Nihilipster (123456-nihilipster@users.noreply.github.com) <123456-nihilipster@users.noreply.github.com>
sub   ...

pub   rsa4096/abcdefgh12345678 ... [SC]
      ...
uid                 [ultimate] Nihilipster (654321-nihilipster@users.noreply.gitlab.com) <654321-nihilipster@users.noreply.gitlab.com>
sub   ...

Suponiendo que el ID de la llave GPG para GitHub sea 12345678abcdefgh y la de GitLab sea abcdefgh12345678, se registran, según sea el caso, en https://github.com/settings/keys o https://gitlab.com/profile/gpg_keys.

Para GitHub, se extrae la llave pública con:

[nihilipster@localhost:~]$ /usr/bin/gpg2 --armor --export 12345678abcdefgh

Para GitLab, se extrae la llave pública con:

[nihilipster@localhost:~]$ /usr/bin/gpg2 --armor --export abcdefgh12345678

Configuración de Git🔗

La configuración de Git puede hacerse de manera global (al usuario) o bien local (al repositorio).

Se puede configurar de manera global el nombre del usuario, el programa para cifrado y la firma de commits por default:

[nihilipster@localhost:~]$ /usr/bin/git config --global user.name Nihilipster
[nihilipster@localhost:~]$ /usr/bin/git config --global gpg.program /usr/bin/gpg2
[nihilipster@localhost:~]$ /usr/bin/git config --global commit.gpgsign true

Mientras que el correo electrónico privado y el ID de la llave GPG por repositorio:

GitHub:

[nihilipster@localhost:~/github/repositor1]$ /usr/bin/git config --local user.email 123456-nihilipster@users.noreply.github.com
[nihilipster@localhost:~/github/repositor1]$ /usr/bin/git config --local user.signingkey 12345678abcdefgh

GitLab:

[nihilipster@localhost:~/gitlab/repositor1]$ /usr/bin/git config --local user.email 654321-nihilipster@users.noreply.github.com
[nihilipster@localhost:~/gitlab/repositor1]$ /usr/bin/git config --local user.signingkey abcdefgh12345678

Fuentes🔗