Firma tus commits de git con GPG


El objetivo de esta entrada no es más que resumir los pasos que haríamos para empezar a usar git en nuestro PC. Linux, por supuesto. Básicamente en esta entrada veremos cómo setear los parámetros mínimos de configuración global, y cómo dejarlo listo para poder firmar nuestros commits (en GitHub), para que el resto de compañeros puedan confiar en que nuestros commits han estado hechos, en efecto, por nosotros.

Setear nuestro usuario en la conf global de git

Lo primero para empezar a usar git en nuestro sistema es setear nuestro usuario y email. Lo haremos en la configuración global de git y básicamente seguiremos los pasos aquí descritos.

[[email protected] ~]$ git config --global user.name "Adrian Perez"
[[email protected] ~]$ git config --global user.email "[email protected]"
[[email protected] ~]$ git config --list
user.name=Adrian Perez
user.email=adria[email protected]

Vale, ¿pero qué es la configuración global? En git, básicamente, contamos con tres niveles de configuración:

  • /etc/gitconfig: Contiene los valores que se aplican a todos los usuarios del sistema y a sus repositorios. Este es el fichero que se modifica/consulta al pasarle la opción «–system» al hacer «git config». Requiere permisos de superusuario.
  • ~/.gitconfig or ~/.config/git/config: Define los valores configurados para tí, el usuario. Aquí usaríamos la opción «–global» en el «git config».
  • .git/config: finalmente, tenemos el fichero config dentro del propio repo de git. Define los valores específicos para ese repositorio.

GPG

Ahora que hemos seteado quién somos, en nuestra configuración global de git, podemos pasar a ver qué hace falta para firmar nuestros commits con GPG.

Si no hemos hecho nada respecto a las claves GPG, al ejecutar el comando gpg por primera vez, se nos crearán la estructura y ficheros de configuraciones iniciales.

[[email protected] ~]$ gpg --list-keys
gpg: directorio `/home/adri/.gnupg' creado
gpg: creado un nuevo fichero de configuración `/home/adri/.gnupg/gpg.conf'
gpg: ATENCIÓN: aún no se han activado en esta ejecución las opciones en `/home/adri/.gnupg/gpg.conf'
gpg: almacén `/home/adri/.gnupg/pubring.gpg' creado
gpg: /home/adri/.gnupg/trustdb.gpg: se ha creado base de datos de confianza

Podremos generar nuestra primera clave tal y como sigue:

[[email protected] ~]$ gpg --gen-key
gpg (GnuPG) 1.4.22; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: almacén `/home/adri/.gnupg/secring.gpg' creado
Seleccione el tipo de clave deseado:
   (1) RSA y RSA (por defecto)
   (2) DSA y ElGamal (por defecto)
   (3) DSA (sólo firmar)
   (4) RSA (sólo firmar)
¿Su elección?1
las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (2048) 
El tamaño requerido es de 2048 bits
Especifique el período de validez de la clave.
         0 = la clave nunca caduca
        = la clave caduca en n días
      w = la clave caduca en n semanas
      m = la clave caduca en n meses
      y = la clave caduca en n años
¿Validez de la clave (0)? 0
La clave nunca caduca
¿Es correcto? (s/n) s

Necesita un identificador de usuario para identificar su clave. El programa
construye el identificador de usuario a partir del Nombre Real, Comentario y Dirección
de Correo Electrónico de esta forma:
    "Heinrich Heine (Der Dichter) "

Nombre y apellidos: Adrian Perez
Dirección de correo electrónico: [email protected]
Comentario: 
Está usando el juego de caracteres `utf-8'.
Ha seleccionado este identificador de usuario:
    "Adrian Perez "

¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? V
Necesita una contraseña para proteger su clave secreta.

Si has probado de realizar este proceso en un mac y estás teniendo problemas, visita este enlace.

Durante el proceso de creación de nuestra clave, como vemos, deberemos introducir el tipo de clave, la longitud, así como nuestros detalles. Una vez lo tengamos, ya podremos volver a ejecutar el comando «gpg –list-keys» o mejor aun, listarlo con formato LONG.

Con «list-keys» se nos mostrará una entrada para la clave PUBlica, el UserID, y SUBkey. [+info]

[[email protected] ~]$ gpg --list-keys
/home/adri/.gnupg/pubring.gpg
-----------------------------
pub   2048R/AC324969 2018-04-19
uid                  Adrian Perez 
sub   2048R/852B628C 2018-04-19

En cualquier caso, podemos volver a listar las claves con formato LONG, para ya así pasar a exportarlas:

[[email protected] ~]$ gpg --list-secret-keys --keyid-format LONG
/home/adri/.gnupg/secring.gpg
-----------------------------
sec   2048R/748E21E2AC324969 2018-04-19
uid                          Adrian Perez 
ssb   2048R/8EABDD09852B628C 2018-04-19
[[email protected] ~]$ gpg --armor --export 748E21E2AC324969
-----BEGIN PGP PUBLIC KEY BLOCK-----
...

Con el comando anterior, mostraremos por pantalla la clave pública que deberemos copiar en nuestro perfil de GitHub. Una vez seteada nuestra clave pública en nuestro perfil de GitHub volveremos a usar la configuración global de git para setear la key con la que cifraremos los commits:

$ git config --global user.signingkey 748E21E2AC324969

A partir de entonces, ya podremos empezar a firmar nuestros commits con el flag «-S»:

$ git commit -a -S -m 'signed commit'

O aun mejor, seteando la variable global commit-gpgsign a true, para no tener que recordar usar la opción «-S» al commitear y por tanto, por defecto firmar todos nuestros commits:

$ git config --global commit.gpgsign true

Fuentes:

https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work
https://help.github.com/articles/signing-commits-with-gpg/
https://help.github.com/articles/adding-a-new-gpg-key-to-your-github-account/
https://help.github.com/articles/generating-a-new-gpg-key/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *