¿Qué debo hacer cuando recibo el mensaje de error KEYEXPIRED después de una actualización de apt-get?

74

Al actualizar mis paquetes en un sistema basado en Debian por un

sudo apt-get update

Tengo ese mensaje de error:

Reading package lists... Done
W: GPG error: ftp://ftp.fr.debian.org stable/non-US Release: 
The following signatures were invalid: KEYEXPIRED 1138684904

¿Qué debo hacer para arreglar esto?

paulgreg
fuente

Respuestas:

117

Para encontrar las claves de repositorio caducadas y sus ID, use apt-keylo siguiente:

LANG=C apt-key list | grep expired

Obtendrá un resultado similar al siguiente:

pub   4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28]

La ID de clave es el bit después de /ie, BE1DB1F1en este caso.

Para actualizar la clave, ejecute

sudo apt-key adv --recv-keys --keyserver keys.gnupg.net BE1DB1F1

Nota: La actualización de la clave obviamente no funcionará si el responsable del paquete (todavía) no ha cargado una nueva clave. En ese caso, es poco lo que puede hacer aparte de contactar al mantenedor, presentar un error contra su distribución, etc.

Un forro para actualizar todas las claves caducadas: (gracias a @ryanpcmcquen)

for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
kynan
fuente
2
eso no funciona para mí, después del comando para actualizar la clave, la clave aún caducó.
Karl Forner el
@KarlForner estaba agregando la clave con éxito?
kynan
Sí, fue exitoso.
Karl Forner
44
One liner:for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
ryanpcmcquen
2
Solo una pista sobre la parte grep: "expirado" aparece, por lo que dependiendo de la configuración de LANG * esto puede no funcionar, por ejemplo, para la configuración pl_PL.UTF-8 uno tiene que cambiar "expirado" a "wygasł" para hacer esto trazador de líneas para trabajar.
Cromax
6

Debe obtener la clave más nueva y agregarla, en ese momento apt la detectará y no se quejará. Esto normalmente no debería suceder, pero a veces sucede. Lo que realmente necesita es saber el código hexadecimal de la clave que necesita agregar; una vez que tienes eso, es bastante cuesta abajo desde allí.

Algunos ejemplos:

Avery Payne
fuente
2

Tuve un error similar, pero el problema estaba en el tiempo del sistema. El año fue 1961 :)

Corregí la fecha / hora del sistema y después de eso podría actualizar sin un profesional

Slava
fuente
1

En el Wiki de Debian sobre SecureAPT , descubrí que debería eliminar la línea que contiene non-us/etc/apt/sources.list.

En realidad hice eso y funcionó.

paulgreg
fuente
55
Esto puede haber funcionado en un caso particular, pero no es una solución genérica
kynan el
1

También puede suceder cuando la fecha no es correcta.

Verifique la fecha con

date

Si está mal configurado, haga lo siguiente para configurar su zona horaria y sincronización automática de fecha.

apt-get install ntp ntpdate && service ntp stop
dpkg-reconfigure tzdata
ntpdate-debian
service ntp start
Aley
fuente
1

Una causa altamente improbable, pero ocasionalmente posible, de este error es si ha agregado la misma clave dos veces con fechas de vencimiento diferentes. Probablemente sepa que lo ha hecho para que esta respuesta sea relevante para usted.

Esto puede suceder, como sucedió conmigo, al alojar su propio repositorio con sus propias claves. Si usted, cuando la clave está a punto de caducar, simplemente extienda su vida útil en lugar de cambiarla, y si instaló la clave original usando la preselección pero la clave actualizada usando un paquete deb, entonces la clave antigua estará dentro /etc/apt/trusted.gpg, mientras que la nueva termina como un archivo separado debajo de /etc/apt/trusted.gpg.d/. La clave anterior sombreará la nueva, que será completamente ignorada por apt-key. Elimine la clave anterior ejecutando gpg --keyring /etc/trusted.gpg --delete-keys <keyid>y se detectará su nueva clave.

Esta es una configuración de esquina un poco no estándar, pero espero que mi respuesta pueda ahorrar algo de confusión en caso de que alguien más encuentre este problema debido a la misma razón que yo.

sampi
fuente
1

Un oneliner más simple:

for key in $(sudo apt-key list | awk -v FS='[ /:]+' '/expire[sd]/ {print $3}'); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $key; done

Simplemente siento que si estás haciendo cosas como usar cutmás de una vez, hay una herramienta mejor. (Además, creé esto basado en una pregunta diferente ).

Bruno Bronosky
fuente
-1

No tienes que hacer nada. Es solo una advertencia, puedes ver eso desde el W:prefijo.

Michael Franzl
fuente
1
Si no tuviera que hacer nada, todo el sistema de firma para Repos sería inútil. Esta es una característica de seguridad y, en entornos de producción, la integridad clave es crucial para la seguridad.
Broco