ros秘钥失效 EXPKEYSIG F42ED6FBAB17C654 仓库 “http://packages.ros.org/ros/ubuntu focal InRelease” 没有数字签名
问题描述
在ubuntu20.04下执行
sudo apt-get update
(大概率其它版本的ubuntu也会出现问题)
出现错误:
EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
E: 仓库 “http://packages.ros.org/ros/ubuntu focal InRelease” 没有数字签名
原因:
F42ED6FBAB17C654是C1CF 6E31 E6BA DE88 68B1 72B4 F42E D6FB AB17 C654(完整秘钥)的短标识。
2019 年,ROS 官方披露了 build farm / 软件仓库相关的安全事件。随后,Open Robotics 决定轮换仓库签名 key;在 2019 年 5 月底到 6 月上旬,官方宣布由于 build.ros.org 的安全问题,要退役之前用于 ROS apt 仓库签名的旧 key,并部署新的 GPG key 到 packages.ros.org。这把后来广泛出现在 ROS 1 / ROS 2 apt 安装流程里的 key。
ROS 官方在 2021 年专门发过一篇 “ROS GPG Key Expiration Incident”。里面明确说:他们在 2019 年应对安全事件时部署了一把 2 年有效期 的新 GPG key,但后来忘记在到期前延长,因此 2021 年 5 月 29 日左右很多用户执行 apt update 时就开始失败。官方随后延长了 key 的有效期,并让用户更新本地公钥。
到 2025 年,这把 key 再次临近过期。ROS 官方在 2025 年 5 月下旬发布了 “ROS signing key migration guide”,明确说 6 月 1 日 又到了 signing key 的到期点,并提供了迁移方案;对于沿用旧安装方式的系统,常见修复就是重新下载最新的 ros.key,替换 /usr/share/keyrings/ros-archive-keyring.gpg。
因此,2025 年 6 月 1 日后:仍持有这把旧 ROS key 的机器会在 apt update 时看到 EXPKEYSIG F42ED6FBAB17C654。
解决方案
关于ros的秘钥存放位置,可能在如下三处地方:
/usr/share/keyring/ros-archive-keyring.gpg
/etc/apt/trusted.gpg.d/*ros*
/etc/apt/trusted.gpg
可以使用以下命令查询.gpg文件的秘钥内容:
sudo gpg --show-key --fingerprint XXX.gpg
如果在这三处地方找不到*ros*.gpg(ros的秘钥文件),可以去/etc/apt/sources.list.d/ros-latest.list,内容如下:(注意focal对应ubuntu20.04)
deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu focal main
如果/etc/apt/sources.list.d/ros-latest.list内容不是这样,建议备份后修改为以上内容。
在这里可以看到ros在apt中的签名指向/usr/share/keyrings/ros-archive-keyring.gpg。
这时查看/usr/share/keyrings/ros-archive-keyring.gpg,如果出现以下内容:
C1CF 6E31 E6BA DE88 68B1 72B4 F42E D6FB AB17 C654
进行删除,然后执行:
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg
如果访问不到https://raw.githubusercontent.com,就手动下载——打开网页,输入https://raw.githubusercontent.com/ros/rosdistro/master/ros.key
下载ros.key后,更名为ros-archive-keyring.gpg,移动到/usr/share/keyrings/下。
最后,
在检查一遍/etc/apt/sources.list.d/ros-latest.list是不是指向刚刚下载的文件
然后执行
sudo apt-get update
即可解决问题。
附加内容:
命令——删除apt-get缓存:
sudo rm -rf /var/lib/apt/lists/*
命令——打开.gpg文件:
sudo gpg --show-key --fingerprint XXX.gpg
更多推荐
所有评论(0)