Cosa devo fare quando ho ricevuto il messaggio di errore KEYEXPIRED dopo un aggiornamento apt-get?


74

Durante l'aggiornamento dei miei pacchetti su un sistema basato su Debian tramite a

sudo apt-get update

Ho quel messaggio di errore:

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

Cosa devo fare per risolvere questo problema?

Risposte:


117

Per trovare le chiavi del repository scadute e i relativi ID, utilizzare apt-keycome segue:

LANG=C apt-key list | grep expired

Otterrai un risultato simile al seguente:

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

In questo caso, l' ID chiave è il bit dopo /ie BE1DB1F1.

Per aggiornare la chiave, eseguire

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

Nota: l' aggiornamento della chiave ovviamente non funzionerà se il manutentore del pacchetto non ha (ancora) caricato una nuova chiave. In tal caso, non puoi fare altro che contattare il manutentore, presentare un bug contro la tua distribuzione, ecc.

Una fodera per aggiornare tutte le chiavi scadute: (grazie 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

2
che non funziona per me, dopo il comando per l'aggiornamento della chiave, la chiave è ancora scaduta.
Karl Forner,

@KarlForner stava aggiungendo la chiave correttamente?
Kynan,

sì, ha avuto successo.
Karl Forner,

4
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 l'

2
Solo un suggerimento per grep parte: "scaduto" è i18ned, quindi a seconda delle impostazioni LANG * questo potrebbe non funzionare, ad esempio per le impostazioni pl_PL.UTF-8 si deve cambiare "scaduto" in "wygasł" per renderlo uno- fodera per funzionare.
Cromax,

6

È necessario ottenere la chiave più recente e aggiungerla, a quel punto apt la rileverà e non si lamenterà. Questo non dovrebbe normalmente accadere, ma a volte succede. Ciò di cui hai veramente bisogno è conoscere il codice esadecimale della chiave che devi aggiungere; una volta che hai quello, è praticamente in discesa da lì.

Qualche esempio:


2

Ho avuto un errore simile, ma il problema era nell'ora di sistema. L'anno era il 1961 :)

Ho corretto la data / ora del sistema e successivamente ho potuto aggiornare senza un professionista


1

Nel Wiki Debian su SecureAPT , ho scoperto che dovrei rimuovere la riga contenente non-usda /etc/apt/sources.list.

L'ho fatto davvero e ha funzionato.


5
Questo potrebbe aver funzionato in un caso particolare, ma non è una soluzione generica
kynan il

1

Potrebbe accadere anche quando la data non è corretta.

Controlla la data con

date

Se non è configurato correttamente, procedi come segue per impostare la sincronizzazione automatica di fuso orario e data.

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

1

Una causa altamente improbabile, ma a volte possibile, per questo errore è se si è aggiunta la stessa chiave due volte con date di scadenza diverse. Probabilmente sapresti di averlo fatto perché questa risposta sia pertinente per te.

Questo può accadere, come è stato per me, quando si ospita il proprio repository con le proprie chiavi. Se tu, quando la chiave sta per scadere, semplicemente estendi la sua durata invece di cambiarla, e se hai installato la chiave originale usando preconfigurazione ma la chiave aggiornata usando un pacchetto deb, allora la vecchia chiave sarà inserita /etc/apt/trusted.gpg, mentre la nuova finisce come un file separato sotto /etc/apt/trusted.gpg.d/. La vecchia chiave ombreggerà quella nuova, che sarà completamente ignorata da apt-key. Rimuovere la vecchia chiave eseguendo gpg --keyring /etc/trusted.gpg --delete-keys <keyid>e la nuova chiave verrà rilevata.

Questa è una configurazione angolare non standard, ma spero che la mia risposta possa salvare un po 'di confusione nel caso in cui qualcun altro incontri questo problema a causa dello stesso motivo che ho fatto io.


1

Un oneliner più semplice:

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

Sento che se stai facendo cose come usare cutpiù di una volta, c'è uno strumento migliore. (Inoltre, l'ho creato sulla base di una domanda diversa .)


-1

Non devi fare nulla. È solo un avvertimento, puoi vederlo dal W:prefisso.


1
Se non dovesse fare nulla l'intero sistema di firma per Repos sarebbe inutile. Questa è una funzione di sicurezza e negli ambienti di produzione l'integrità delle chiavi è cruciale per la sicurezza.
Broco,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.