Debian更新源时出现签名无法进行验证(GPG error)
2010-10-24 20:07:01 阿炯

----------------------------
签名无法进行验证的解决办法
添加非官方的源是update后会出现没有公钥的gpg错误提示,对于经常更新源来说,很是麻烦。解决的办法是导入公钥,用如下语句:
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 提示所缺少的那个公钥
gpg --armor --export 公钥串 | apt-key add -

这是我自建源在更新时出现了问题:
正在读取软件包列表... 完成
W: GPG error: http://deb.freeoa.net lenny Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 07DC563D1F41B907
W: 您可能需要运行 apt-get update 来解决这些问题

W: GPG error: http://mirrors.163.com lenny-proposed-updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA W: GPG error: http://mirrors.163.com lenny/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA W: You may want to run apt-get update to correct these problems

gdeb:~# gpg --keyserver subkeys.pgp.net --recv-keys 07DC563D1F41B907
gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
gpg: 下载密钥‘1F41B907’,从 hkp 服务器 subkeys.pgp.net

gpg: 公钥服务器超时
gpg: 从公钥服务器接收失败:公钥服务器错误

key服务器出现了问题,需要换一台key服务器。建议使用'wwwkeys.eu.pgp.net'。

gdeb:~# gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 07DC563D1F41B907
gpg: 下载密钥‘1F41B907’,从 hkp 服务器 subkeys.pgp.net
gpg: 公钥服务器超时
gpg: 从公钥服务器接收失败:公钥服务器错误
gdeb:~# gpg --keyserver subkeys.pgp.net --recv-keys 07DC563D1F41B907
gpg: 下载密钥‘1F41B907’,从 hkp 服务器 subkeys.pgp.net
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 1F41B907:公钥“Christian Marillat ”已导入
gpg: 没有找到任何绝对信任的密钥
gpg: 合计被处理的数量:1
gpg:           已导入:1

完整的语句如下:
-----------------
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 07DC563D1F41B907
gpg --armor --export 1F41B907 | apt-key add -
apt-get update

注:keyserver还可以是:keyring.debian.org
-----------------
这样,再用apt-get update就不会有gpg error了,即使这样也有下面两种情形。

-----------------
'签名无效'的解决办法:
正在读取软件包列表... 完成
W: GPG error: http://deb.freeoa.net lenny/updates Release: 下列签名无效: BADSIG 9AA38DCD55BE302B Debian Archive Automatic Signing Key (5.0/lenny)
W: GPG error: http://deb.freeoa.net lenny Release: 下列签名无效: BADSIG 07DC563D1F41B907 Christian Marillat
W: 您可能需要运行 apt-get update 来解决这些问题

apt-get 提示 GPG error
~# wget http://ftp-master.debian.org/keys/archive-key-5.0.asc
#网站上说这个是当前使用的key。
~# rm -rf /etc/apt/*.gpg
#删除以前的key
~# apt-key add archive-key-5.0.asc
#添加刚下载的key
~# apt-key update
#更新添加的key信息
~# apt-get update

有时添加非官方的源时,apt-get update会出现没有公钥的gpg errir提示,说可能会有后门程序等。解决的办法是导入公钥,如下语句:
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys
gpg --armor --export | apt-key add -

例如debian-multimedia.org源:
出现错误:
W: GPG error: http://www.debian-multimedia.org testing Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 07DC563D1F41B907

解决办法:
输入:
~# gpg --keyserver wwwkeys.eu.pgp.net --recv-keys 07DC563D1F41B907
输出:
gpg: requesting key 1F41B907 from hkp server wwwkeys.eu.pgp.net
gpg: key 1F41B907: "Christian Marillat " 1 new signature
gpg: key 1F41B907: "Christian Marillat " 1 new subkey
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:            new subkeys: 1
gpg:         new signatures: 1
输入:
~# gpg --armor --export 1F41B907 | apt-key add -
OK

再经apt-get update 更新时就正常了。后来发现key服务器又失效了,在换了两次后仍然无效,可采用以下方法:
-----------------

# apt-get update
...
W: GPG 错误:http://ftp.cn.debian.org squeeze-backports Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY 07DC563D1F41B907

# gpg --keyserver keyring.debian.org --recv-keys 07DC563D1F41B907
gpg: 已创建目录‘/root/.gnupg’
gpg: 新的配置文件‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’里的选项于此次运行期间未被使用
gpg: 钥匙环‘/root/.gnupg/secring.gpg’已建立
gpg: 钥匙环‘/root/.gnupg/pubring.gpg’已建立
gpg: 下载密钥‘1F41B907’,从 hkp 服务器 keyring.debian.org
gpg: /root/.gnupg/trustdb.gpg:建立了信任度数据库
gpg: 密钥 1F41B907:公钥“Christian Marillat <marillat@debian.org>”已导入
gpg: 没有找到任何绝对信任的密钥
gpg: 合计被处理的数量:1
gpg:           已导入:1

# gpg --armor --export 1F41B907 | apt-key add -
OK

-----------------

执行命令:apt-get update  出现如下错误
 
正在读取软件包列表... 完成
 
W: 以下 ID 的密钥没有可用的公钥:
8B48AD6246925553
 
执行以下命令解决:
-----------------
gpg --keyserver subkeys.pgp.net --recv ucode
gpg --export --armor ucode | sudo apt-key add -
 
说明:ucode改为公钥中最后8位即可!
-----------------


如果上述方法伋不能奏效(大多都是不能连接上对应的服务器),可以安装debian的key管理软件,通过'apt-cache search keyring'可以看到诸多的key包。

# apt-get install debian-archive-keyring  官方的key

# apt-get install debian-multimedia-keyring  多媒体相关的key

该文章最后由 阿炯 于 2014-11-27 11:13:48 更新,目前是第 5 版。