apt update 時の 'EXPKEYSIG' GPG エラーの修正

beginner🐧 Linux2026-07-03| Ubuntu 18.04, 20.04, 22.04, 24.04; Debian 10, 11, 12; Kali Linux.

Error Message

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: ... EXPKEYSIG 40976EAF437D05B5
#apt#gpg#linux-security#ubuntu#debian

アップデートが失敗する理由

パッケージのアップデート中に問題が発生した場合、おそらく次のような大量のテキストが表示されているはずです。

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://repo.example.com/debian stable InRelease: The following signatures were invalid: EXPKEYSIG 40976EAF437D05B5
W: Failed to fetch http://repo.example.com/debian/dists/stable/InRelease  The following signatures were invalid: EXPKEYSIG 40976EAF437D05B5
W: Some index files failed to download. They have been ignored, or old ones used instead.

根本的な原因

Linux ディストリビューションは、リポジトリパッケージの署名に GPG (GNU Privacy Guard) キーを使用しています。この検証プロセスにより、ダウンロードしたコードが第三者によって改ざんされていないことが保証されます。セキュリティ基準を維持するため、これらのキーの多くには有効期限があり、通常 2 〜 5 年ごとに期限切れになります。

EXPKEYSIG エラーは、ローカルシステムに古い公開キーが保存されている場合に発生します。また、リポジトリの管理者が新しいキーを発行したものの、メタデータが正しく更新されていない場合にも起こり得ます。これは重要なセキュリティ機能ですが、深夜 2 時の重要な依存関係のインストールを妨げられると非常に厄介です。システムを正常な状態に戻しましょう。

解決策 1:キーサーバー経由で更新する(従来の方法)

Ubuntu や Debian などの標準的なリポジトリは、多くの場合、公開キーサーバーを使用しています。エラーメッセージに表示されている 8 桁または 16 桁の ID を使用して、最新のキーをプルできます。今回の例では、その ID は 40976EAF437D05B5(これは Ubuntu Archive Master Signing Key です)です。

ターミナルに表示された ID に置き換えて、次のコマンドを実行してください。

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5

キーが更新されたことが確認できたら、再度アップデートを試みてください。

sudo apt update

注:新しいシステムでは「deprecated(非推奨)」という警告が表示される場合があります。その場合は、解決策 2 に進んでください。

解決策 2:最新の GPG 手法(Ubuntu 22.04 以降および Debian 12)

最新の Linux バージョンでは apt-key の使用が廃止されつつあります。代わりに、キーは /usr/share/keyrings/ または /etc/apt/trusted.gpg.d/ に保存されます。これによりセキュリティが向上し、グローバルな信頼ストアをクリーンに保つことができます。

手動でキーをエクスポートするには、以下の手順に従ってください。

# ローカルの GPG キーリングにキーを受信する
gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5

# APT が認識できる形式で信頼済みディレクトリにエクスポートする
gpg --export 40976EAF437D05B5 | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/renewed-key.gpg

まだエラーが表示されますか? /etc/apt/sources.list.d/ 内の特定の .list ファイルを確認してください。新しい .gpg ファイルを指す signed-by フラグが含まれていることを確認します。

解決策 3:サードパーティ製リポジトリ(Docker、Google、Node)の修正

Google や Docker などのベンダーは、必ずしも Ubuntu のキーサーバーを使用しているわけではありません。彼らは独自のキーファイルをホストしています。上記の手順で解決しない場合は、プロバイダーから直接キーをダウンロードする必要があります。

Google Chrome または Cloud SDK のエラーを修正する場合:

curl https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/google.gpg

Docker リポジトリのエラーを修正する場合:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

解決策 4:一度削除して再追加する(クリーンな状態にする)

ローカルのキーリングに、同じキーの競合する複数のバージョンが含まれていると、破損することがあります。ループに陥った場合は、古いキーを完全に削除してから再追加してみてください。

  • キー名を確認する:apt-key list
  • 期限切れのキーを削除する:sudo apt-key del 40976EAF437D05B5
  • 解決策 1 または 2 のインポートコマンドを再実行する。

検証:修正の確認

すべてが同期されていることを確認するために、次の一連のコマンドを実行します。

sudo apt clean
sudo apt update

成功すると、「パッケージリストを読み込んでいます... 完了」というクリーンなメッセージが表示されます。GPG に関して「W:」や「E:」で始まる行が表示されなければ、署名は有効であり、システムは安全です。

事前のメンテナンス

キーの期限切れは、サーバーメンテナンスにおける日常的な作業です。いくつかの簡単な習慣を身につけることで、これらのエラーを未然に防ぐことができます。まず、システムを毎週アップデートしましょう。アップデートには、有効期限を延長する新しいキーリングパッケージが含まれていることがよくあります。

次に、HashiCorp や NodeSource などのベンダーが提供する公式のインストールスクリプトを使用してください。これらのスクリプトには通常、キーリングのローテーションを自動的に処理するロジックが含まれています。最後に、複数のサーバーを管理している場合は、ログに「W:」という文字列がないか監視し、デプロイパイプラインが停止する前に期限切れのキーを検知できるようにしましょう。

Related Error Notes