Que dois-je faire lorsque le message d'erreur KEYEXPIRED s'affiche après une mise à jour d'apt-get?

74

Lors de la mise à jour de mes paquets sur un système basé sur Debian par

sudo apt-get update

J'ai ce message d'erreur:

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

Que dois-je faire pour résoudre ce problème?

paulgreg
la source

Réponses:

117

Pour rechercher les clés de référentiel expirées et leurs ID, utilisez apt-keyles méthodes suivantes:

LANG=C apt-key list | grep expired

Vous obtiendrez un résultat similaire à celui-ci:

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

L'ID clé est le bit après le /ie BE1DB1F1dans ce cas.

Pour mettre à jour la clé, exécutez

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

Remarque: La mise à jour de la clé ne fonctionnera évidemment pas si le responsable du paquet n'a pas (encore) téléchargé une nouvelle clé. Dans ce cas, vous ne pouvez rien faire d'autre que de contacter le responsable, de déposer un bogue contre votre distribution, etc.

Une doublure pour mettre à jour toutes les clés expirées: (grâce à @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
la source
2
cela ne fonctionne pas pour moi, après la commande de mise à jour de la clé, la clé est toujours expirée.
Karl Forner
@ KarlForner ajoutait la clé avec succès?
Kynan
oui c'était réussi.
Karl Forner
4
Un paquebot: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
Juste un indice concernant la partie grep: "expired" est "i18ned", donc, selon les paramètres LANG *, cela peut ne pas fonctionner, par exemple pour les paramètres pl_PL.UTF-8, il faut remplacer "expired" par "wygasł" pour que celui-ci doublure au travail.
Cromax
6

Vous devez obtenir la clé la plus récente et l'ajouter. A ce stade, apt la détectera et ne se plaindra pas. Cela ne devrait normalement pas arriver, mais cela arrive parfois. Ce dont vous avez vraiment besoin, c'est de connaître le code hexadécimal de la clé à ajouter. une fois que vous avez cela, c'est à peu près en descente.

Quelques exemples:

Avery Payne
la source
2

J'ai eu une erreur similaire, mais le problème était dans l'heure du système. L'année était 1961 :)

J'ai corrigé la date / heure système et après cela pourrait mettre à jour sans un pro

slava
la source
1

Sur le wiki Debian à propos de SecureAPT , j’ai constaté que je devais supprimer la ligne contenant non-us/etc/apt/sources.list.

En fait, je l'ai fait et cela a fonctionné.

paulgreg
la source
5
Cela a peut-être fonctionné dans un cas particulier mais n'est pas une solution générique
kynan
1

Cela peut aussi arriver quand la date n'est pas correcte.

Vérifiez la date avec

date

Si la configuration est incorrecte, procédez comme suit pour définir votre fuseau horaire et la synchronisation automatique de la date.

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

Cette erreur est très peu probable, mais parfois possible, si vous avez ajouté la même clé deux fois avec des dates d'expiration différentes. Vous sauriez probablement l'avoir fait pour que cette réponse soit pertinente pour vous.

Cela peut arriver, comme cela m’a été fait pour moi, lorsque vous hébergez votre propre référentiel avec vos propres clés. Si, lorsque la clé est sur le point d'expirer, prolongez simplement sa durée de vie plutôt que de la changer, et si vous avez installé la clé d'origine à l'aide de la préconfiguration, mais avec la clé mise à jour à l'aide d'un paquet deb, l'ancienne clé sera /etc/apt/trusted.gpgalors insérée , tandis que la nouvelle se termine sous un fichier séparé sous /etc/apt/trusted.gpg.d/. L'ancienne clé occultera la nouvelle, qui sera complètement ignorée par apt-key. Supprimez l'ancienne clé en cours d'exécution gpg --keyring /etc/trusted.gpg --delete-keys <keyid>et votre nouvelle clé sera détectée.

Il s’agit là d’une configuration de coin non standard, mais j’espère que ma réponse permettra d’éviter toute confusion au cas où une autre personne se heurterait à ce problème pour la même raison que moi.

sampi
la source
1

Un oneliner plus 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

Je pense juste que si vous utilisez des choses comme utiliser cutplus d'une fois, il existe un meilleur outil. (En outre, j'ai créé ceci basé sur une question différente .)

Bruno Bronosky
la source
-1

Tu n'as rien à faire. C'est juste un avertissement, ça se voit depuis le W:préfixe.

Michael Franzl
la source
1
S'il n'avait rien à faire, tout le système de signature pour Repos serait inutile. Il s’agit d’une fonctionnalité de sécurité et, dans les environnements de production, l’intégrité des clés est cruciale pour la sécurité.
Broco