O que devo fazer quando recebi a mensagem de erro KEYEXPIRED após uma atualização do apt-get?

74

Ao atualizar meus pacotes em um sistema baseado em debian por um

sudo apt-get update

Eu recebi essa mensagem de erro:

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

O que devo fazer para corrigir isso?

paulgreg
fonte

Respostas:

117

Para localizar quaisquer chaves de repositório expiradas e seus IDs, use apt-keyo seguinte:

LANG=C apt-key list | grep expired

Você obterá um resultado semelhante ao seguinte:

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

O ID da chave é o bit após o /ie BE1DB1F1, neste caso.

Para atualizar a chave, execute

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

Nota: A atualização da chave obviamente não funcionará se o mantenedor do pacote ainda não tiver carregado uma nova chave. Nesse caso, há pouco que você pode fazer além de entrar em contato com o mantenedor, registrar um bug em sua distribuição, etc.

Um forro para atualizar todas as chaves expiradas: (graças 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
fonte
2
isso não funciona para mim, depois do comando para atualizar a chave, a chave ainda está vencida.
Karl Forner
@KarlForner estava adicionando a chave com sucesso?
Kynan #
sim, foi bem sucedido.
precisa
4
Um 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
Apenas uma dica para grep parte: "expirado" é i18ned, portanto, dependendo das configurações de LANG *, isso pode não funcionar, por exemplo, para as configurações pl_PL.UTF-8, é preciso alterar "expirado" para "wygasł" para torná-lo único. forro para trabalhar.
precisa saber é o seguinte
6

Você precisa obter a chave mais recente e adicioná-la, quando o apt irá detectá-la e não reclamar. Isso normalmente não deveria acontecer, mas às vezes acontece. O que você realmente precisa é conhecer o código hexadecimal da chave que você precisa adicionar; depois de ter isso, é praticamente ladeira abaixo a partir daí.

Alguns exemplos:

Avery Payne
fonte
2

Eu tive um erro semelhante, mas o problema estava na hora do sistema. O ano era 1961 :)

Corrigi a data / hora do sistema e, depois disso, era possível atualizar sem um profissional

slava
fonte
1

No Debian Wiki sobre SecureAPT , descobri que devo remover a linha que contém o non-usarquivo /etc/apt/sources.list.

Na verdade, eu fiz isso e funcionou.

paulgreg
fonte
5
Isso pode ter trabalhado em um caso particular, mas é não uma solução genérica
Kynan
1

Também pode acontecer quando a data não está correta.

Verifique a data com

date

Se estiver configurado incorretamente, faça o seguinte para definir o fuso horário e a sincronização automática da data.

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

Uma causa altamente improvável, mas ocasionalmente possível, para esse erro é se você adicionou a mesma chave duas vezes com datas de validade diferentes. Você provavelmente saberia ter feito isso para que esta resposta seja relevante para você.

Isso pode acontecer, como aconteceu comigo, ao hospedar seu próprio repositório com suas próprias chaves. Se você, quando a chave estiver prestes a expirar, simplesmente estender sua vida útil em vez de alterá-la, e se você instalou a chave original usando pré-configuração, mas a chave atualizada usando um pacote deb, a chave antiga estará dentro /etc/apt/trusted.gpg, enquanto a nova termina como um arquivo separado em /etc/apt/trusted.gpg.d/. A chave antiga sombreará a nova, que será completamente ignorada apt-key. Remova a chave antiga executando gpg --keyring /etc/trusted.gpg --delete-keys <keyid>, e sua nova chave será detectada.

Essa é uma configuração de canto não padrão, mas espero que minha resposta possa salvar alguma confusão, caso alguém encontre esse problema devido ao mesmo motivo que eu.

sampi
fonte
1

Um oneliner mais simples:

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

Eu apenas sinto que se você estiver fazendo coisas como usar cutmais de uma vez, existe uma ferramenta melhor. (Além disso, criei isso com base em uma pergunta diferente .)

Bruno Bronosky
fonte
-1

Você não precisa fazer nada. É apenas um aviso, você pode ver isso no W:prefixo.

Michael Franzl
fonte
11
Se ele não tivesse que fazer nada, todo o sistema de assinaturas para Repos seria inútil. Esse é um recurso de segurança e, nos ambientes de produção, a integridade das chaves é crucial para a segurança.
Broco