Binary Coffee

¬ŅC√≥mo y por qu√© firmar tus commits?

git github
# ¬ŅC√≥mo y por qu√© firmar tus commits? A estas alturas del siglo XXI seguramente usas Git tanto para mantener un control estricto de las versiones que vas generando en tu proceso de desarrollo de software, como para estructurar tu flujo de trabajo individual o en equipo. Si no es as√≠, realmente debieras comenzar ya mismo. En este breve tutorial vamos a conversar sobre los commits, por qu√© es importante firmarlos con una llave GPG y c√≥mo hacerlo. ## Lo que sucede normalmente Normalmente cuando estamos programando, cerramos los commits a nombre nuestro y de nuestro correo. Esto sucede porque cuando instalas Git por primera vez, requiere que lo configures con estos comandos a nivel global: ``` git config --global user.name ‚ÄúTu nombre‚ÄĚ git config --global user.email ‚ÄúTu correo‚ÄĚ ``` O si lo configuras para un repositorio espec√≠fico: ``` git config user.name ‚ÄúTu nombre‚ÄĚ git config user.email ‚ÄúTu correo‚ÄĚ ``` Esta forma tan com√ļn de trabajar deja expuesta una potencial vulnerabilidad que nos puede traer serios problemas cuando trabajamos en equipos de muchas personas. De esta manera puede suceder que un desarrollador configure su cliente de Git para realizar commits a nombre de otro miembro del equipo y con esto, introducir errores o vulnerabilidades en la base de c√≥digo del proyecto para causar da√Īos futuros. Imag√≠nate que eres la persona encargada de revisar los commits antes de mezclarlos con las ramas que van a producci√≥n, y que alguien sube un commit haci√©ndose pasar por ti. Existe una probabilidad muy real de que no revises ese commit porque creas que fuiste t√ļ mismo, y lo apruebes. De esta manera, un commit mal intencionado o err√≥neo podr√≠a terminar de cara a tus usuarios causando problemas o dejando incluso puertas traseras. Parece ciencia ficci√≥n, pero es un problema muy real en nuestra industria. O puede ser que sencillamente alguien use el terminal de un miembro del equipo para introducir un commit da√Īino (caso m√°s veros√≠mil ūüėČ). La soluci√≥n es firmar los commits usando claves GPG. ## ¬ŅC√≥mo se hace? Te explicar√© c√≥mo hacerlo, a partir de lo que he visto en la documentaci√≥n oficial de GitHub. El primer paso es generar una llave GPG en tu terminal de trabajo: ``` gpg --full-generate-key ``` Debes especificar el tipo de llave que deseas usar, o presiona Enter para aceptar la opci√≥n por defecto. Introduce el tama√Īo de la llave, GitHub recomienda al menos 4096 bits. Introduce el tiempo que la llave ser√° v√°lida (recomendable, por ejemplo: 1 a√Īo) o presiona Enter para aceptar la opci√≥n por defecto que implica que la llave nunca expira (no recomendable). Verifica que ńļas opciones que seleccionaste son correctas. Introduce tu informaci√≥n de usuario. Cuando se te pida tu direcci√≥n de email, aseg√ļrate de introducir la direcci√≥n de correo verificada de tu cuenta de GitHub. Introduce una contrase√Īa segura. Usa el comando `gpg --list-secret-keys --keyid-format LONG` para listar las llaves GPG para las cuales tienes sus llaves p√ļblicas y privadas. Conocer la llave privada de tu llave GPG es necesario para firmar commits o ingluso tags. ``` gpg --list-secret-keys --keyid-format LONG ``` De la lista de llaves GPG, copia la que desees usar. En este ejemplo el ID de la llave GPG es `3AA5C34371567BD2`: ``` $ gpg --list-secret-keys --keyid-format LONG /Users/hubot/.gnupg/secring.gpg ------------------------------------ sec 4096R/3AA5C34371567BD2 2016-03-10 [expires: 2017-03-10] uid Hubot ssb 4096R/42B317FD4BA89E7A 2016-03-10 ``` Ejecuta el siguiente comando, sustituyendo el ID de la llave GPG que deseas usar. En este ejemplo el id de la llave GPG es `3AA5C34371567BD2`: ``` $ gpg --armor --export 3AA5C34371567BD2 ``` Copia tu llave GPG, comenzando en `-----BEGIN PGP PUBLIC KEY BLOCK-----` y terminando en `-----END PGP PUBLIC KEY BLOCK-----`: A√Īade la llave GPG a tu cuenta de GitHub: * En la parte superior derecha de GitHub, haz click en tu foto de perfil y luego en **Settings**: ![](https://api.binary-coffee.dev/uploads/29a32b7f977742abb1bcc5a124464831.png) * En la barra de preferencias, haz click en **SSH and GPG keys**: ![](https://api.binary-coffee.dev/uploads/6bc817a414734d098821b4924ba2f759.png) * Luego haz click en ‚ÄúNew SSH key‚ÄĚ: ![](https://api.binary-coffee.dev/uploads/5ab912b71e4c4939a8f1a62298806c59.png) * En el campo ‚ÄúKey‚ÄĚ, pega la llave GPG que copiaste anteriormente. ![](https://api.binary-coffee.dev//uploads/e2b50501c8a8436d94dcdd394eb87cb3.png) * Haz click en **Add SSH key**. * Para confirmar la acci√≥n, introduce tu contrase√Īa de GitHub. Para decirle a tu cliente de Git que vas a usar una llave GPG para firmar tus commits, ejecuta los siguientes comandos, sustituyendo la llave de ejemplo por la tuya: ``` $ git config --global user.signingkey 3AA5C34371567BD2 $ git config --global commit.gpgsign true ``` Puedes configurar GIT para usar la llave GPG localmente en un repositorio: ``` $ git config user.signingkey 3AA5C34371567BD2 $ git config commit.gpgsign true ``` Edita el archivo de configuraci√≥n de Git para que se firmen todos los commits autom√°ticamente en tu repositorio. Abre el archivo `.git/config` y a√Īade esta l√≠nea en la secci√≥n `[user]`. ``` signingkey = 3AA5C34371567BD2 ``` Un √ļltimo paso es editar el archivo `~/.gnupg/pgp.conf` y a√Īade estas dos l√≠neas al final para evitar el error `no tty`: ``` no-tty use-agent ``` ¬°Listo! A partir de este momento, cada vez que desees firmar un commit (que debiera ser siempre), debes correr este comando e introducir la contrase√Īa asociada a la llave GPG: ``` $ git commit -S -m ‚Äúyour commit message‚ÄĚ ``` Luego puedes subir tu commit al repositorio remoto: ``` $ git push ``` Ahora puedes navegar en GitHub hasta tu commit y comprobar que est√° verificado. ![](https://api.binary-coffee.dev//uploads/c87483d25ff545fe85b67db7b4630763.png) Puedes ver m√°s informaci√≥n de tu commit verificado en el bot√≥n **Verified**: ![](https://api.binary-coffee.dev//uploads/6df081fd704d4637bbaa0c1c9ee8f377.png) **Nota:** Recuerda configurar tu IDE para que firme los commits autom√°ticamente. Por ejemplo, si usas PyCharm debes seleccionar la opci√≥n **Sign-off commit**. ![](https://api.binary-coffee.dev//uploads/2dcc86bbfc534680804abb6262bcc122.png) Y esto es todo, lo que queda es difundir esta cultura de trabajo a nuestros compa√Īeros de equipo y colegas en la comunidad. Ahora venga, a tomarnos un caf√© binario y sigamos construyendo nuestras naves, ya con un poco m√°s de seguridad en el trabajo. ¬°Salud! ūüĎ©‚ÄćūüöÄ ‚ėēÔłŹ ūüöÄ
Opiniones