软件包签名
概述
本指南介绍了 RabbitMQ 发布包签名以及如何验证下载的发布工件上的签名。
发布签名允许用户验证他们下载的工件是否由受信任方(例如团队或软件包分发服务)发布。 这可以使用 GPG 命令行工具完成。 诸如 apt
和 yum
之类的软件包管理工具也验证存储库签名。
签名密钥
RabbitMQ 发布工件(二进制和源代码)都使用 GnuPG 和 我们的发布签名密钥 进行签名。
此外,Debian 和 RPM 软件包存储库内容由其上游存储库的密钥签名。 目前,这意味着 Cloudsmith 存储库密钥。
导入签名密钥
使用 GPG
在验证签名之前,必须下载 RabbitMQ 签名密钥。 可以直接获取密钥,也可以使用 keys.openpgp.org 获取。 建议使用直接下载方法,因为大多数密钥服务器都容易过载、滥用和攻击。
直接下载
密钥通过 GitHub 和 rabbitmq.com 分发
curl -L https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc --output rabbitmq-release-signing-key.asc
gpg --import rabbitmq-release-signing-key.asc
使用密钥服务器
可以从 keys.openpgp.org 导入密钥
gpg --keyserver "hkps://keys.openpgp.org" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"
备用密钥服务器
gpg --keyserver "keyserver.ubuntu.com" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"
gpg --keyserver "pgp.surfnet.nl" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"
gpg --keyserver "pgp.mit.edu" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"
使用 apt
在 Debian 和 Ubuntu 系统上,假设 apt 存储库 用于安装,则必须在安装任何软件包之前将受信任的存储库签名密钥添加到系统中。
这可以使用密钥服务器或(对于 RabbitMQ 主签名密钥)直接下载来完成。
直接下载
主 RabbitMQ 签名密钥通过 GitHub 和 rabbitmq.com 分发
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmor > /usr/share/keyrings/com.rabbitmq.team.gpg
使用密钥服务器
可以从 keys.openpgp.org 导入相同的主 RabbitMQ 签名密钥
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor > /usr/share/keyrings/com.rabbitmq.team.gpg
当使用 Team RabbitMQ modern Erlang PPA 时,还需要添加一个密钥
## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor > /usr/share/keyrings/com.rabbitmq.team.gpg
使用 RPM
在基于 RPM 的系统(RHEL、Fedora、CentOS)上,假设 yum 存储库 用于安装,则应使用 rpm --import
导入密钥。
直接下载
密钥通过 GitHub 和 rabbitmq.com 分发
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
验证签名
要检查软件包的签名,请下载 RabbitMQ 签名密钥和签名文件。 签名文件使用 .asc
扩展名,该扩展名跟随其工件文件名,例如 rabbitmq-server-generic-unix-4.0.4.tar.xz
的签名文件将是 rabbitmq-server-generic-unix-4.0.4.tar.xz.asc
。
然后使用 gpg --verify
gpg --verify [filename].asc [filename]
这是一个示例会话,在从下载区域检索 RabbitMQ 源代码存档及其相关的分离签名之后
gpg --verify rabbitmq-server_4.0.4-1_all.deb.asc rabbitmq-server_4.0.4-1_all.deb
# => gpg: Signature made Mon Aug 26 00:22:55 2024 EDT
# => gpg: using RSA key 0A9AF2115F4687BD29803A206B73A36E6026DFCA
# => gpg: Good signature from "RabbitMQ Release Signing Key <info@rabbitmq.com>" [unknown]
# (elided)
# => Primary key fingerprint: 0A9A F211 5F46 87BD 2980 3A20 6B73 A36E 6026 DFCA
如果签名无效,将发出“BAD signature”消息。 如果是这种情况,则应仔细验证软件包的来源、签名文件和签名密钥。 不得使用未能通过签名验证的软件包。
如果签名有效,您应该会看到“Good signature”消息; 如果您没有签署我们的密钥,您将看到“Good signature”消息以及关于我们的密钥不受信任的警告。
如果您信任 RabbitMQ 签名密钥,则可以通过使用您自己的密钥对其进行签名来避免 GnuPG 的警告输出(要创建您的私钥,请运行 gpg --gen-key
)
gpg --sign-key 0x0A9AF2115F4687BD29803A206B73A36E6026DFCA
Cloudsmith
Cloudsmith.io 是一种托管软件包分发服务,它使用自己的签名密钥对上传到它的工件进行签名。 然后必须将密钥添加到系统中。
Cloudsmith 提供存储库设置脚本,其中包括签名密钥导入。 但是,请注意,该脚本目前在 GPG 密钥处理方面不遵循 Debian 最佳实践。
要导入密钥
# import the Cloudsmith key
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key -o cloudsmith-rabbitmq-key.asc
gpg --import cloudsmith-rabbitmq-key.asc
导入密钥后,请按照 Debian 或 基于 RPM 的 Linux 指南中的安装说明进行操作。