包签名
概述
本指南介绍 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
使用密钥服务器
相同的 RabbitMQ 主签名密钥可以从 keys.openpgp.org 导入。
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor > /usr/share/keyrings/com.rabbitmq.team.gpg
当使用 Team RabbitMQ 现代 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-3.9.3.tar.xz
的签名文件将是 rabbitmq-server-generic-unix-3.9.3.tar.xz.asc
。
然后使用 gpg --verify
gpg --verify [filename].asc [filename]
这是一个示例会话,在从下载区域检索 RabbitMQ 源代码归档文件及其关联的分离签名后
gpg --verify rabbitmq-server_3.13.7-1_all.deb.asc rabbitmq-server_3.13.7-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 <[email protected]>" [unknown]
# (elided)
# => Primary key fingerprint: 0A9A F211 5F46 87BD 2980 3A20 6B73 A36E 6026 DFCA
如果签名无效,将发出“错误签名”消息。如果是这种情况,应仔细验证软件包的来源、签名文件和签名密钥。不得使用签名验证失败的软件包。
如果签名有效,您应该会看到“良好签名”消息;如果您未签名我们的密钥,您将看到“良好签名”消息以及有关我们的密钥不受信任的警告。
如果您信任 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 指南中的安装说明进行操作。