解决ros功能包仓库出现签名验证错误的问题(An error occurred during the signature verification)

本文介绍在Ubuntu系统中遇到ROS包安装时GPG签名验证错误的问题,涉及更新源并添加新的ROS密钥。通过curl获取并安装证书,修复apt-get update报错,确保软件包来源的安全性。

是什么问题?

当我们进行ros相关的功能包的安装的时候或者在有安装ros的linux系统上进行sudo apt-get update的操作的时候, 就会出现以下报错:

Get:1 http://packages.ros.org/ros/ubuntu focal InRelease [4,676 B]
Hit:2 http://ports.ubuntu.com/ubuntu-ports focal InRelease
Hit:3 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
Hit:4 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
Err:1 http://packages.ros.org/ros/ubuntu focal InRelease
The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
Hit:5 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
Fetched 4,676 B in 4s (1,078 B/s)
Reading package lists… Done
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://packages.ros.org/ros/ubuntu focal InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: Failed to fetch http://packages.ros.org/ros/ubuntu/dists/focal/InRelease The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: Some index files failed to download. They have been ignored, or old ones used instead.

为什么出现这个报错

ROS使用debian包管理系统来分发软件, 因此就需要一个GPG密钥来确保功能包的准确性和权威性, 通常来说,默认的密钥大概在使用2年之后会过期, 因此我们需要从新添加ros相关的密钥上去。

如何解决

下载证书并添加。

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.key
sudo apt-key add ./ros.key

安装成功后,会显示OK的log信息。

$ sudo apt update
...
 Get:15 http://packages.ros.org/ros/ubuntu focal InRelease [4,676 B] 
...
 Fetched 2,671 kB in 2s (1,607 kB/s)                     
 Reading package lists… Done
 Building dependency tree       
 Reading state information… Done
 30 packages can be upgraded. Run 'apt list --upgradable' to see them.
在使用 `sudo apt-get update` 时出现的 GPG 签名验证失败错误,例如: ``` GPG error: ... The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org> ``` 表明 APT 无法正确验证某个仓库签名。这种情况通常由以下几种原因引起,并可通过相应方法解决。 --- ### 更新过期的仓库密钥 某些软件源(如 ROS)使用的 GPG 密钥可能已过期或变更。此时需要手动更新对应的密钥。可以通过如下命令从指定密钥服务器获取并添加新的密钥: ```bash curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - ``` 该命令会从 GitHub 获取 ROS 官方发布的签名密钥并将其添加到本地 APT 密钥环中,从而修复由于密钥过期导致的签名验证问题[^2]。 --- ### 指定密钥服务器重新获取密钥 如果系统中已经存在旧的密钥但无法通过默认方式更新,可以尝试通过指定密钥服务器手动刷新对应密钥。例如: ```bash sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` 此命令将连接 Ubuntu 的公钥服务器并下载指定的密钥,确保其状态为“not changed”或“unchanged”,以确认密钥已被正确加载和更新[^1]。 --- ### 清除缓存后重试 有时 APT 缓存中的旧数据也可能导致签名验证失败。可尝试清除 APT 缓存后再运行更新命令: ```bash sudo apt clean sudo apt update ``` 这将删除本地存储的索引文件并重新下载,有助于解决因缓存损坏引发的验证错误。 --- ### 禁用不必要签名验证(临时方案) 若仅需临时绕过签名验证以便完成更新操作,可以在 `sources.list` 或相关源配置文件中添加 `trusted=yes` 参数: ```bash deb [trusted=yes] http://packages.ros.org/ros/ubuntu focal main ``` 此方法适用于测试环境或紧急情况,**不建议长期使用**,因为它会降低系统的安全性。 --- ### 验证当前密钥状态 可以通过以下命令列出所有已导入的 APT 密钥,检查目标密钥是否仍然有效或是否需要更新: ```bash sudo apt-key list ``` 查找输出中 `F42ED6FBAB17C654` 对应的条目,确认其有效性及签发者信息是否匹配预期来源。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值