包签名
概述
本指南涵盖了 RabbitMQ 发行版软件包的签名,以及如何验证已下载发行版制品的签名。
通过发行版签名,用户可以验证他们下载的制品是由受信任的一方(如团队或软件包分发服务)发布的。这可以使用 GPG 命令行工具来完成。apt 和 yum 等软件包管理工具也会验证存储库签名。
签名密钥
RabbitMQ 发行版制品(包括二进制文件和源代码)均使用 GnuPG 和我们的发行版签名密钥进行签名。
此外,由 RabbitMQ 团队维护的 Debian 存储库的内容也使用相同的密钥进行签名。
导入签名密钥
使用 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 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.2.5-1_all.deb.asc rabbitmq-server_4.2.5-1_all.deb
# => gpg: Signature made (date elided)
# => 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