Este artículo explica cómo actualizar una calve GPG de un repositorio de Debian/Ubuntu.

Cuando una clave GPG de un repositorio de Debian/Ubuntu expira, ocurre el error EXPKEYSIG al actualizar los repositorios con apt-get update:

root@debian:~# apt-get update
Err:2 https://packages.sury.org/php buster InRelease
  The following signatures were invalid: EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
Reading package lists... Done
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://packages.sury.org/php buster InRelease: The following signatures were invalid: EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
W: Failed to fetch https://packages.sury.org/php/dists/buster/InRelease  The following signatures were invalid: EXPKEYSIG B188E2B695BD4743 DEB.SURY.ORG Automatic Signing Key <deb@sury.org>
W: Some index files failed to download. They have been ignored, or old ones used instead.

En este caso ha expirado la calve del repositorio DEB.SURY.ORG (empaquetado de versiones de PHP actualizadas para Debian/Ubuntu).

La solución más simple consiste en eliminar la clave expirada e instalar la nueva.

La clave GPG puede estar instalada dentro del directorio /etc/apt/trusted.gpg.d/ como un archivo con extensión .gpg. En tal caso se puede eliminar directamente con rm. Sin embargo, si la clave fue instalada con apt-key, esta se encontrará en el keyring local (base de datos de claves GPG /etc/apt/trusted.gpg). Para eliminar la clave en tales casos se deberá recurrir al utilitario apt-key.

Primero listar cuál es la clave expirada que se debe eliminar:

root@debian:~# apt-key list 2>/dev/null | grep expired -B 1

pub   rsa3072 2019-03-18 [SC] [expired: 2021-03-17]
      1505 8500 A023 5D97 F5D1  0063 B188 E2B6 95BD 4743
uid           [ expired] DEB.SURY.ORG Automatic Signing Key <deb@sury.org>

Ahora bien, para eliminar la clave se debe conocer su ID de clave. En esta salida, el ID de clave son los últimos 8 caracteres del fingerprint (en este ejemplo la cadena 1505 8500 A023 5D97 F5D1 0063 B188 E2B6 95BD 4743).

Eliminar la clave con ID "95BD4743":

root@debian:~# apt-key del 95BD4743
OK

Al listar nuevamente, no quedan claves expiradas:

root@debian:~# apt-key list | grep expired
Warning: apt-key output should not be parsed (stdout is not a terminal)

Sólo resta instalar la clave actualizada. En este caso simplemente descargar la nueva clave desde el mirror oficial (packages.sury.org):

root@debian:~# wget -O /etc/apt/trusted.gpg.d/deb.sury.gpg https://packages.sury.org/php/apt.gpg
--2021-03-18 08:59:38--  https://packages.sury.org/php/apt.gpg
Resolving packages.sury.org (packages.sury.org)... 172.67.182.150, 104.21.18.148, 2606:4700:3030::ac43:b696, ...
Connecting to packages.sury.org (packages.sury.org)|172.67.182.150|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1769 (1.7K) [application/octet-stream]
Saving to: ‘/etc/apt/trusted.gpg.d/deb.sury.gpg’

/etc/apt/trusted.gpg.d/deb.sury 100%[=======================================================>]   1.73K  --.-KB/s    in 0s      

2021-03-18 08:59:38 (25.4 MB/s) - ‘/etc/apt/trusted.gpg.d/deb.sury.gpg’ saved [1769/1769]

Luego volver a actualizar los repositorios, esta vez sin errores:

root@debian:~# apt-get update
Hit:1 http://security.debian.org buster/updates InRelease
Hit:2 https://packages.sury.org/php buster InRelease                                  
Hit:3 http://cloudfront.debian.net/debian buster InRelease                            
Hit:4 http://cloudfront.debian.net/debian buster-updates InRelease         
Hit:5 https://deb.nodesource.com/node_6.x jessie InRelease               
Reading package lists... Done

Compartí este artículo