Ubuntu16.04更新系统源时出现错误提示W: GPG 错误,签名无效/没有公钥

Ubuntu16.04更新系统源时出现错误提示W: GPG 错误

问题

Ubuntu16.04更换源后运行apt-get update命令时出现了以下问题

命中:1 http://linux.teamviewer.com/deb stable InRelease                        
命中:2 http://archive.canonical.com/ubuntu xenial InRelease                    
获取:3 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]    
获取:4 http://repo.mysql.com/apt/ubuntu xenial InRelease [21.6 kB]             
错误:4 http://repo.mysql.com/apt/ubuntu xenial InRelease                       
  下列签名无效: KEYEXPIRED 1550412832  KEYEXPIRED 1550412832  KEYEXPIRED 1550412832
命中:5 http://ppa.launchpad.net/nm-l2tp/network-manager-l2tp/ubuntu xenial InRelease
命中:6 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial InRelease       
获取:7 http://security.ubuntu.com/ubuntu xenial-security/main amd64 DEP-11 Metadata [68.0 kB]
命中:8 http://cn.archive.ubuntu.com/ubuntu xenial InRelease    
获取:9 http://cn.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]   
获取:10 http://security.ubuntu.com/ubuntu xenial-security/main DEP-11 64x64 Icons [67.1 kB]
获取:11 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 DEP-11 Metadata [116 kB]
获取:12 http://security.ubuntu.com/ubuntu xenial-security/universe DEP-11 64x64 Icons [173 kB]
获取:13 http://cn.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]
获取:14 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [947 kB]
获取:15 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 DEP-11 Metadata [2,464 B]
获取:16 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main i386 Packages [819 kB]
获取:17 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main amd64 DEP-11 Metadata [318 kB]
获取:18 http://cn.archive.ubuntu.com/ubuntu xenial-updates/main DEP-11 64x64 Icons [227 kB]
获取:19 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [747 kB]
获取:20 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe i386 Packages [684 kB]
获取:21 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 DEP-11 Metadata [252 kB]
获取:22 http://cn.archive.ubuntu.com/ubuntu xenial-updates/universe DEP-11 64x64 Icons [350 kB]
获取:23 http://cn.archive.ubuntu.com/ubuntu xenial-updates/multiverse amd64 DEP-11 Metadata [5,968 B]
获取:24 http://cn.archive.ubuntu.com/ubuntu xenial-updates/multiverse DEP-11 64x64 Icons [14.3 kB]
获取:25 http://cn.archive.ubuntu.com/ubuntu xenial-backports/main amd64 DEP-11 Metadata [3,328 B]
获取:26 http://cn.archive.ubuntu.com/ubuntu xenial-backports/universe amd64 DEP-11 Metadata [5,104 B]
已下载 5,146 kB,耗时 57秒 (89.9 kB/s)                                         
AppStream cache update completed, but some metadata was ignored due to errors.
正在读取软件包列表... 完成
W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:http://repo.mysql.com/apt/ubuntu xenial InRelease: 下列签名无效: KEYEXPIRED 1550412832  KEYEXPIRED 1550412832  KEYEXPIRED 1550412832
W: 无法下载 http://repo.mysql.com/apt/ubuntu/dists/xenial/InRelease  下列签名无效: KEYEXPIRED 1550412832  KEYEXPIRED 1550412832  KEYEXPIRED 1550412832
W: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。

解决

百度了一下说是密钥GPG Key过期,需要更新
发现两种方法:
1.相应镜像站获取GPG Key
2.keyserver获取GPG Key

1.相应镜像站获取GPG Key

步骤1:跟据错误提示可以知道是MySQL的签名过期,那么就去MySQL镜像站http://repo.mysql.com/的目录下寻找GPG Key,最后找到路径http://repo.mysql.com/RPM-GPG-KEY-mysql.就在根目录下,因为不熟悉镜像站的路径,在http://repo.mysql.com/apt/ubuntu/路径下找了好久好久都没找见,汗颜~~
步骤2:然后执行命令

curl -s -L  http://repo.mysql.com/RPM-GPG-KEY-mysql | sudo apt-key add -

显示OK后就真的OK了
参考: https://blog.csdn.net/weixin_32820767/article/details/83017479

2.keyserver获取GPG Key

步骤1:使用apt-key list命令查看系统所有Key列表,并获取Key String Keyid .

pub 4096R/89DF5277 2010-07-11
uid Guillaume Plessis <gui@dotdeb.org>
sub 4096R/3D624A3B 2010-07-11
sub 4096R/A2098A6E 2010-07-11
pub 1024D/5072E1F5 2003-02-03 [expired: 2017-02-16]  #过期的Key,Key String为5072E1F5 
uid MySQL Release Engineering <mysql-build@oss.oracle.com>
#我的不是这个样子,但是因为没法复原到过期状态了,就复制了别人的

PS:Key String这个名字是我自己想的,在http://keyserver.ubuntu.com/中,sting的位置填入这个Key String就可以查到相应的Key(前面需要加0x,比如5072E1F5就需要填0x5072E1F5,但是此处不需要用到这个).
Key String这个值是固定的5072E1F5对应的就是MySQL的Key

步骤2:用apt-key del命令删除过期的Key (无法确定该步骤是否必须,我是删掉了,有的博文中没有这一步)

apt-key del 5072E1F5  #5072E1F5为上一步查到的Key String,删除后key list中就不再有这一项了

步骤3:用apt-key adv命令获取新Key

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5072E1F5
Executing: /tmp/tmp.TnxLCZUBe9/gpg.1.sh --keyserver
keyserver.ubuntu.com
--recv-keys
8C718D3B5072E1F5
gpg: 下载密钥‘5072E1F5’,从 hkp 服务器 keyserver.ubuntu.com
gpg: 密钥 5072E1F5:公钥“MySQL Release Engineering <mysql-build@oss.oracle.com>”已导入
gpg: 合计被处理的数量:1
gpg:               已导入:1

有的博文中keyserver为keyserver.ubuntu.com:80,尝试发现会报错;
有的博文中–recv-keys为8C718D3B5072E1F5,不清楚5072E1F5前面的字符组合是怎么获取的 ,但是尝试是可行的. 
参考博文:
https://blog.csdn.net/qq_37392932/article/details/81014867
https://blog.csdn.net/shanpenghui/article/details/89137281

解决Key问题后,重新运行sudo apt-get update就OK了

额外问题:由于没有公钥,无法验证下列签名

在删除Key后直接运行sudo apt-get update后出现以下问题

错误:6 http://repo.mysql.com/apt/ubuntu xenial InRelease                     
  由于没有公钥,无法验证下列签名: NO_PUBKEY 8C718D3B5072E1F5

直接按照方法二步骤三作一次就OK了,话说这个KeyID到底是个什么结构?

附国内可用key server列表:
keyserver.ubuntu.com
pgp.mit.edu
subkeys.pgp.net
www.gpg-keyserver.de

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页