Khắc phục lỗi GPG 'EXPKEYSIG' khi chạy apt update

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

Tại sao quá trình cập nhật thất bại

Nếu bạn đang gặp bế tắc khi cập nhật các gói phần mềm, có lẽ bạn đang nhìn thấy một đoạn thông báo như thế này:

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.

Nguyên nhân gốc rễ

Các bản phân phối Linux dựa vào khóa GPG (GNU Privacy Guard) để ký các gói trong kho lưu trữ. Quá trình xác minh này đảm bảo mã bạn tải về không bị bên thứ ba chỉnh sửa. Hầu hết các khóa này đều có thời hạn sử dụng, thường hết hạn sau mỗi 2 đến 5 năm để duy trì các tiêu chuẩn bảo mật.

Lỗi EXPKEYSIG xảy ra khi hệ thống cục bộ của bạn lưu giữ một khóa công khai (public key) đã lỗi thời. Nó cũng có thể xảy ra nếu người quản trị kho lưu trữ cấp khóa mới nhưng không cập nhật siêu dữ liệu (metadata) chính xác. Mặc dù đây là một tính năng bảo mật quan trọng, nhưng nó có thể gây khó chịu khi chặn việc cài đặt các dependency quan trọng vào lúc 2 giờ sáng. Hãy cùng đưa hệ thống của bạn hoạt động trở lại.

Giải pháp 1: Làm mới qua Keyserver (Phương pháp cũ)

Các kho lưu trữ tiêu chuẩn, như của Ubuntu hoặc Debian, thường sử dụng một máy chủ khóa công khai (public keyserver). Bạn có thể tải phiên bản khóa mới nhất bằng ID 8 hoặc 16 ký tự từ thông báo lỗi của mình. Trong ví dụ này, ID đó là 40976EAF437D05B5 (thực tế là Khóa ký chính của Ubuntu Archive).

Chạy lệnh này, thay thế ID bằng ID hiển thị trong terminal của bạn:

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

Sau khi terminal xác nhận khóa đã được cập nhật, hãy thử cập nhật lại:

sudo apt update

Lưu ý: Bạn có thể thấy cảnh báo "deprecated" (không còn được hỗ trợ) trên các hệ thống mới hơn. Nếu vậy, hãy chuyển sang Giải pháp 2.

Giải pháp 2: Phương pháp GPG hiện đại (Ubuntu 22.04+ và Debian 12)

Các phiên bản Linux hiện đại đang dần loại bỏ apt-key. Thay vào đó, chúng lưu trữ các khóa trong /usr/share/keyrings/ hoặc /etc/apt/trusted.gpg.d/. Cách này an toàn hơn và giữ cho kho lưu trữ tin cậy toàn cục được sạch sẽ.

Làm theo các bước sau để xuất khóa thủ công:

# Nhận khóa vào GPG keyring cục bộ của bạn
gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5

# Xuất khóa sang thư mục tin cậy theo định dạng mà APT hiểu được
gpg --export 40976EAF437D05B5 | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/renewed-key.gpg

Vẫn còn lỗi? Hãy kiểm tra tệp .list cụ thể trong /etc/apt/sources.list.d/. Đảm bảo nó bao gồm một cờ signed-by trỏ đến tệp .gpg mới của bạn.

Giải pháp 3: Khắc phục các kho lưu trữ bên thứ ba (Docker, Google, Node)

Các nhà cung cấp như Google hoặc Docker không phải lúc nào cũng sử dụng máy chủ khóa của Ubuntu. Họ lưu trữ các tệp khóa của riêng mình. Nếu các bước trên thất bại, bạn cần tải khóa trực tiếp từ nhà cung cấp.

Để sửa lỗi Google Chrome hoặc Cloud SDK:

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

Để sửa lỗi kho lưu trữ Docker:

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

Giải pháp 4: Xóa và thêm lại (Làm sạch từ đầu)

Các keyring cục bộ đôi khi có thể bị hỏng nếu chúng chứa nhiều phiên bản xung đột của cùng một khóa. Nếu bạn bị kẹt trong một vòng lặp, hãy thử xóa hoàn toàn khóa cũ trước khi thêm lại.

  • Tìm tên khóa: apt-key list
  • Xóa khóa đã hết hạn: sudo apt-key del 40976EAF437D05B5
  • Chạy lại lệnh nhập (import) từ Giải pháp 1 hoặc 2.

Xác minh: Xác nhận việc khắc phục

Chạy chuỗi lệnh này để đảm bảo mọi thứ đã được đồng bộ:

sudo apt clean
sudo apt update

Thành công là khi bạn thấy thông báo "Reading package lists... Done" sạch sẽ. Nếu bạn không thấy bất kỳ dòng nào bắt đầu bằng "W:" hoặc "E:" liên quan đến GPG, các chữ ký của bạn đã hợp lệ và hệ thống của bạn đã an toàn.

Bảo trì chủ động

Việc hết hạn khóa là một phần thường xuyên của quá trình bảo trì máy chủ. Bạn có thể chủ động tránh các lỗi này bằng một vài thói quen đơn giản. Đầu tiên, hãy cập nhật hệ thống hàng tuần; các bản cập nhật thường bao gồm các gói keyring mới giúp gia hạn ngày hết hạn.

Thứ hai, hãy sử dụng các tập lệnh cài đặt chính thức từ các nhà cung cấp như HashiCorp hoặc NodeSource. Các tập lệnh này thường bao gồm logic để xử lý việc xoay vòng keyring tự động. Cuối cùng, nếu bạn quản lý nhiều máy chủ, hãy theo dõi nhật ký (logs) để tìm các chuỗi "W:" nhằm phát hiện các khóa sắp hết hạn trước khi chúng làm gián đoạn quy trình triển khai (deployment pipeline) của bạn.

Related Error Notes