Proteger la autoría de tu código es clave para evitar suplantaciones y riesgos. Con llaves PGP/GPG puedes firmar commits y lograr que GitLab muestre el distintivo Verified, confirmando que el autor eres tú y no alguien que clonó tu nombre y correo. En equipos abiertos y proyectos open source, esta verificación marca la diferencia.
¿Por qué firmar commits con PGP en GitLab importa?
Firmar con PGP añade una capa de autenticación basada en criptografía: una llave privada firma el commit y la llave pública en GitLab lo valida. Así se evita que cualquiera configure un nombre y correo falsos y firme a tu nombre.
Identidad confiable: GitLab muestra el estado Verified junto a cada commit.
Prevención de suplantación: la firma prueba que el commit proviene de tu llave privada.
Relevancia en open source: los maintainers pueden aceptar cambios con mayor confianza.
Complemento en proyectos cerrados: además de los permisos de proyecto y grupo.
¿Cómo generar llaves GPG con buena seguridad?
En Linux, aunque el mecanismo se llama PGP (Pretty Good Privacy), el programa se llama GPG. Primero verifica que lo tienes instalado y luego genera tu llave, eligiendo algoritmo, entropía y expiración. Construye tu identidad con nombre, correo y un comentario descriptivo.
which gpg
GPG full gen key
¿Qué algoritmo y entropía elegir?
Al generar la llave, se elige la opción 1: RCA, que permite firmar y encriptar. Luego define la entropía: 4096 bits para mayor dificultad de comprometer la llave.
Algoritmo: opción 1, RCA.
Entropía: 4096 bits para más seguridad.
¿Cómo definir expiración y construir identidad?
Define un periodo de validez: puede ser 1 día, 1 semana, 1 mes o 1 año, usando indicadores como 1, 1W, 1M, 1Y. Evita llaves que nunca expiran; renovar alrededor de un año es una práctica razonable. Asegúrate de que el correo coincida exactamente con el registrado en GitLab.
Expiración: 1, 1W, 1M, 1Y según necesidad.
Identidad: nombre, correo y comentario, por ejemplo: test Platzi DevOps GitLab.
Coincidencia de correo: debe hacer match con GitLab para autenticar commits.
¿Cómo proteger la contraseña de la llave?
Antes de crear la llave, define una contraseña de alta entropía. Usa un manejador de contraseñas y elige una clave larga, con símbolos y caracteres aleatorios. Puedes usar herramientas como Pine Entry Mac, o ingresar la contraseña desde la consola.
Contraseña robusta: larga, con símbolos y aleatoria.
Gestor de contraseñas: no la memorices, guárdala segura.
Para revisar tus llaves y obtener el ID largo asociado a tu correo:
List secret keys
# key ID format: long# filtrar por correo: tu-correo
¿Cómo integrar la llave en GitLab y firmar commits en Git?
En GitLab, ve a Settings y abre GPG Keys para pegar tu llave pública. La pública puede ser conocida por cualquiera, incluso replicada por servidores especializados. La llave privada debes protegerla al máximo.
En Settings > GPG Keys, pega la llave pública.
Presiona Add key para registrarla.
Después, configura Git para firmar automáticamente con tu llave. Usa el ID largo obtenido y define el programa GPG que utilizarás (puede ser GPG 2.0 si corresponde a tu entorno):
git config --global user sign in key TU_ID_DE_LA_LLAVE
git config --global GPG Program GPG
# si usas otra versión: GPG 2.0
A partir de aquí, cada vez que hagas un commit, Git pedirá tu contraseña para firmarlo con tu llave privada. Al subirlo a GitLab, se validará con tu llave pública y aparecerá el badge de Verified.
Firma automática: Git solicita tu contraseña al commitear.
Validación en GitLab: verificación con tu llave pública.
Distintivo visible: estado Verified junto al commit.
¿Ya firmas tus commits con PGP en GitLab o tienes dudas puntuales del flujo? Comparte tu experiencia y preguntas en los comentarios.
En esta clase faltó indicar que para que el commit sea firmado con el GPG es necesario agregar la opción "-S" en el commit, sino realiza un commit normal. Ej.:
git commit -S-am "Este es un commit firmado con GPG"```
No es necesario por que usó:
git config --global xxxx
con esto queda configurado de manera global y no es necesario usar el -S
Para obtener la llave publica :
Pega el siguiente texto 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# Imprime la llave GPG, en formato ASCII armor
**Instalación de GPG en macOS **
-Isntalar el manejador de paquetes para Mac Homebrew
Ahora Homebrew solo es una copia superficial para traer la historia completa ejecutamos el siguiente comando:
git -C "$(brew --repo homebrew/core)" fetch --unshallow
Una ves actualizado nuestro manejador de paquetes instalamos gpg con el siguiente comando:
brew install gpg
Para verificar que se ha instalado correctamente podemos ejecutar el siguiente comando:
which gpg, y debería devolvernos la ruta del directorio donde fue instalada por ej: /usr/local/bin/gpg
Muchas gracias. Me funcionó!
Llaves de seguridad GPG nos permiten firmar los commit que realiza un dev. y es un capa adicional de identificación.
Con la firma de los commit evitamos los caballo de troya en el código, agregando un capa extra de seguridad.
Los commits firmados con llaves GPG tienen una etiqueta adicional de verified.
# para generar llave de seguridad.gpg --full-gen-key
#mostar las llaves generadasgpg --list-secret-key --keyid-format LONG <correo>#exportar la llave públicagpg --armor --export key_id
#configar la llave en gitgit config --global user.signingkey key_id
git config --global gpg.program gpg
Normalmente las llaves gpg deben de expirar en un año.
El correo que se usa en la generación de llaves gpg debe ser el mismo que se usa en gitlab.
Para añadir las llaves GPG en Gitlab Setting/GPG keys.
Les comparto este tutorial que cree basado en está clase.
Buenas tardes, y para Windows tiene el tutorial?
My summary:
# know if gpg is installed
which gpg
# install gpg with brew
brew install gpg
# installa pineentry mac(pgp handler)brew install pinentry-mac
# generate key
gpg --full-gen-key
# 1. select algorith(RSA and RSAfordefault)# 2. select keysize(the longer the better)# 3. specify key time validation(1 year could be fine)# 4.Fill out your personal data.Email must the same as your GitLab account mail
# list keys
# GPG key ID-> that starts with sec i.e.rsa4096/<GPG-key-ID>gpg -k --keyid-format LONGgpg --list-secret-key --keyid-format LONGgpg --list-secret-key --keyid-format LONG<your-email># export the public key and add to GitLab(UserSettings>GPGKeys)gpg --armor --export<GPG-key-ID>| pbcopy
# configure git to use the public key to sign commits
git config --global user.signingkey<GPG-key-ID>git config --global gpg.program gpg
# commit with-S flag to sign
git commit -S-m "My signed commit"# or tell Git to sign your commits automatically
git config --global commit.gpgsigntrue# DELETEGPGKEYS# first deleteprivate key
gpg --delete-secret-key key-ID# then deletepublic key
gpg --delete-key key-ID
Recuerden pasar el parámetro -S a los commits para que tengan la firma digital
git commit -S-m "Esto es un commit"
O cambiar tu configuración para que no sea necesario
git config --global commit.gpgsign true
Para aquellos que quieran instalar pinentry mac:
brew install pinentry-mac```
Recuerden que primero tinen que instalar brew
Por favor pongan su correo... jajaja...
full feeling profe... con mi vida defenderé mi llave... me gustó full el curso... me aclaro muchas cosas... y me divierte... jajaja
Si llegan a el siguiente problema generando las llaves gpg:
Es un problema de permisos, se soluciona cambiando el usuario y grupo de la carpeta ~/.gnupg:
sudo chown -Rmyuser:myuser ~/.gnupg
Buenas tardes, tiene alguien quien facilite para su uso en Windows?
instalando Git tienes Git bash, con eso se puede en windows, curso de Git enseña a usarlo.
Buenos dias, tardes noches a todos..
alguien sabe si es posible firmar los commits y push desde el visual studio code?
Hice un commit asi normalito para checar si funcionaba la llave gpg, entonces revisé el commit en gitlab y encontré que no tenia la etiqueta de verificado.. pero al hacer otro commit desde la consola con el git -commit -S -a -m " este commit si se firmó"
Saludos a todos
En visual está el "control de código fuente" desde ahí puedes hacer casi todo lo que haces desde la terminal, incluido firmar comits, es bátante intuitiva la pestaña.
Yo utilizo github actions algunas recomendaciones porfavor..??
En mi empresa usamos llaves gpg para encriptar los archivos los secretos de ambientes bajos y los subimos a gitlab y no se puede ver estos archivos. Alguien sabe como hacer esta configuración ?
Como administrador de GitaLab CE puedo listar aquello commits que no esten firmados?
Que diferencia existe entre ssh y ggp en términos de suplantación de identidad?