1. 目标 xxx/etc/apt/sources.list:yy/etc/apt/sources.list:zz 中被配置了多次

  • 问题:/etc/apt/sources.list 同时启用了多个镜像源。
  • 解决:注释掉 /etc/apt/sources.list 中多余的镜像源,只保留其中一个即可。

2. 由于没有公匙,无法验证下列签名: NO_PUBKEY xxx

  • 问题:GPG Key 对应的 GPG 验证文件过期或者是有些软件源没有导入 GPG Key 对应的 GPG 验证文件。可以通过下列命令查看所有 GPG Key:
1
sudo apt-key list
  • 解决办法:更新无效 GPG Key 对应的 GPG 验证文件。可以通过以下命令下载更新 GPG Key 对应的 GPG 验证文件:
1
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys xxx

【注】命令中的 xxx 为报错中 NO_PUBKEY 后的 GPG Key 。命令中的 keyserver.ubuntu.com 为提供 GPG Key 对应的 GPG 验证文件的公钥服务器,目前国内可访问的公钥服务器列表如下:

或者,如果能够找到该 GPG Key 对应的 GPG 验证文件,则可以直接拷贝到 /etc/apt/trusted.gpg.d 目录下,而不用通过 keyserver 下载。

  1. 对于 Debin 官方源的 GPG 验证文件,可能无法在公钥服务器中找到其 GPG Key,但可以直接使用 apt 下载安装相应的 GPG 验证文件:
1
sudo apt install debian-keyring debian-archive-keyring
  1. 对于 Deepin 官方源的 GPG 验证文件,无法在公钥服务器中找到其 GPG Key,目前只能通过拷贝 Deepin 系统中的 GPG 验证文件到 Ubuntu20.04 中,目前我已将个人 Deepin 系统中的 GPG 验证文件上传至 Gitee 仓库 DeepinKeying,有需要的伙伴可自行下载并将其中所有的 GPG 验证文件拷贝到 /etc/apt/trusted.gpg.d 目录下。

3. server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

  • 问题:在使用 apt 进行更新系统或安装软件时报这个错误。
  • 原因:一般是由于本地和服务器之间的证书验证失败,可能本地没有证书或者本地证书过期,或者软件源服务器证书过期。
  • 解决:
  1. 本地缺少证书 & 本地证书过期。
1
sudo update-ca-certificates
  1. 软件源服务器证书过期。

这种情况下我们个人一般就心有余而力不足了,只能修改本地配置不进行证书核验:

1
echo "Acquire { https::Verify-Peer false }" | sudo tee /etc/apt/apt.conf.d/99verify-peer.conf

【注】2021 年 9 月 30 日,Let’s Encrypt 组织使用的 IdentTrust DST Root CA X3 根证书过期,因此很多使用了 Let’s Encrypt 签发的证书但没有及时更新证书的网站都受到了影响。