Introducción

Nos últimos días cando quero firmar un commit con GPG estou a ter un erro. En concreto no momento de commitear obteño a seguinte saída:

error: gpg failed to sign the data
fatal: failed to write commit object

Co cal se quero firmar as contribucións, non podo.

Así que neste artigo vou recoller que é este erro e como solventalo.

En que consiste este erro

Facendo unha busca por internet aparecen erros polo programa GPG, que parece que apunta a unha versión equivocada. Nalgúns casos a xente pide deter o demo para volver a correlo, etc.

Pero é algo máis simple ca isto. Xa levaba algún tempo sen escribir un artigo e non lembro cando foi que din de alta a miña clave. Así que a miña primeira sospeita foi que a clave caducara. Co seguinte comando podo listar as claves e ver o estado:

gpg --list-keys --keyid-format LONG

No meu caso esta foi a saída ao comando:

pub   rsa3072/0000000000000009 2022-07-19 [SC] [expired: 2024-07-18]
      1111111111111111111111111111111111111119
uid                 [ expired] CodigoMorrazo <codigomorrazo@gmail.com>

Polo que a miña primeira intuición era correcta, as claves teñen dous anos de duración. Así que agora teño que estender a miña data de caducidade, ou renovala máis ben.

Correxindo o erro: estender a data de caducidade

O primeiro será editar a clave con

gpg --edit-key 0000000000000009

NOTA: Substitúe 0000000000000009 polo ID da túa clave, mudando o número polo que aparece na saída anterior despois de rsa3072.

Isto abriranos a consola de GPG, nela poderemos ver os datos da nosa clave, outra vez a data de caducidade e algunha información máis. Imoslle dicir á clave que está caducada, para o que usaremos o comando expire o que nos da as seguintes opcións:

gpg> expire
Cambiando a data de expiración da chave primaria.
Por favor, indique canto tempo debería ser válida a chave.
         0 = a chave non caduca
      <n>  = a chave caduca en n días
      <n>w = a chave caduca en n semanas
      <n>m = a chave caduca en n meses
      <n>y = a chave caduca en n anos
¿Por canto tempo é válida a chave? (0)

No meu caso escollín un ano, a continuación pedirá confirmar. Dicímoslle que sí e continuamos.

Unha vez cambiada tamén me saíu o aviso de que a subclave tamén ten problemas.

gpg: WARNING: Your encryption subkey expires soon.
gpg: You may want to change its expiration date too.

Por resumir, ás claves son para firmar commits e as subclaves para cifrar correos ou arquivos. Por exemplo, así podemos mudar as subclaves sen afectar á principal. No meu caso só teño unha subclave, así que na mesma consola de GPG escribimos key 1 e xa podemos seguir os mesmos pasos que ca principal. expire e escollemos a nova data.

Agora, levo xa bastante tempo co mesmo contrasinal na clave. Así que vou aproveitar a mudalo. No mesmo editor GPG escribimos passwd, pediranos a clave actúal e a nova clave.

Conclusión e pasos finais

Unha vez temos feitos os cambios que queiramos so nos queda actualizar a clave nos sevidores públicos. No caso de que as teñamos alí. O cal é unha boa idea, xa que alguén pode consultar a nosa firma para verificar que somos nós. E cos datos públicos, tamén nos poderían enviar un correo cifrado ca nosa clave pública, conseguindo máis privacidade.

NOTA: para actualizar a clave nos servidores sería con gpg --keyserver dirección.do.server --send-key ID. Algúns servers que podemos usar son keys.openpgp.org, keyserver.ubuntu.com ou pgp.mit.edu. Para obter o ID executamos a gpg --fingerprint e da saída collemos os oito últimos caracteres hexadecimais.

Isto ven demostrar que hai que ter un mantemento das nosas claves, para evitar cousas como a que me aconteceu a mín. Mudar os contrasinais cada certo tempo, etc. Agora xa queda aquí todo recollido, por se volve ocorrer. O certo é que non é algo que aconteza a cotío, así que estará ben ter os pasos aquí recollidos.