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 voa 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.

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.