4.9. 签名 RPM 软件包
您可以使用以下软件之一签署 RPM 软件包,以确保任何第三方都不能更改其内容:
- Sequoia PGP 支持 OpenPGP 标准。RPM 也使用 Sequoia PGP 来验证软件签名。
- GNU Privacy Guard (GnuPG)支持旧的 OpenPGP 标准版本,这使得 GnuPG 与 RHEL 9 及更早的版本更加兼容。
新的算法和签名可能与早期的 RHEL 版本不兼容。
4.9.1. 使用 GnuPG 签名 RPM 软件包 复制链接链接已复制到粘贴板!
您可以使用 GNU Privacy Guard (GnuPG)软件签名 RPM 软件包。
4.9.1.1. 创建一个 OpenPGP 密钥,以使用 GnuPG 签名软件包 复制链接链接已复制到粘贴板!
要使用 GNU Privacy Guard (GnuPG)软件签名 RPM 软件包,您必须首先创建一个 OpenPGP 密钥。
先决条件
-
您已在您的系统上安装了
rpm-sign和pinentry软件包。
流程
生成一个 OpenPGP 密钥对:
gpg --gen-key
$ gpg --gen-keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查生成的密钥对:
gpg --list-keys
$ gpg --list-keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导出公钥:
gpg --export -a '<public_key_name>' > RPM-GPG-KEY-pmanager
$ gpg --export -a '<public_key_name>' > RPM-GPG-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9.1.2. 配置 RPM ,以使用 GnuPG 签名软件包 复制链接链接已复制到粘贴板!
要使用 GNU Privacy Guard (GnuPG)软件签名一个 RPM 软件包,您必须通过指定 %_gpg_name RPM 宏来配置 RPM。
先决条件
- 为 GnuPG 创建一个 OpenPGP 密钥,如需更多信息,请参阅 创建 OpenPGP 密钥,以使用 GnuPG 签名软件包。
流程
在
$HOME/.rpmmacros目录中定义%_gpg_name宏:%_gpg_name <key-ID>
%_gpg_name <key-ID>Copy to Clipboard Copied! Toggle word wrap Toggle overflow GnuPG 的有效密钥 ID 值可以是密钥指纹、全名或您在创建密钥时提供的电子邮件地址。
4.9.1.3. 向 RPM 软件包添加签名 复制链接链接已复制到粘贴板!
软件包通常是在没有签名的情况下构建的。您可以在软件包发布前添加您的签名。
先决条件
- 为 GnuPG 创建一个 OpenPGP 密钥。如需更多信息,请参阅 为使用 GnuPG 签名软件包创建一个 OpenPGP 密钥。
- 您为签名软件包配置了 RPM。如需更多信息,请参阅 配置 RPM ,以使用 GnuPG 签名软件包。
-
您已在您的系统上安装了
rpm-sign软件包。
流程
在软件包中添加签名:
rpmsign --addsign <package-name>.rpm
$ rpmsign --addsign <package-name>.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
将 导出的 OpenPGP 公钥 导入到 RPM keyring 中:
rpmkeys --import RPM-GPG-KEY-pmanager
# rpmkeys --import RPM-GPG-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 GnuPG 显示密钥 ID:
gpg --list-keys
$ gpg --list-keys [...] pub rsa3072 2025-05-13 [SC] [expires: 2028-05-12] A8AF1C39AC67A1501450734F6DE8FC866DE0394D [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 密钥 ID 是命令输出中的 40 个字符的字符串,例如
A8AF1C39AC67A1501450734F6DE8FC866DE0394D。验证 RPM 文件是否有相应的签名:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 签名密钥 ID 与 OpenPGP 密钥 ID 的最后部分匹配。
4.9.2. 使用 Sequoia PGP 签名 RPM 软件包 复制链接链接已复制到粘贴板!
您可以使用 Sequoia PGP 签名 RPM 软件包,并确保任何第三方不能更改其内容。
4.9.2.1. 创建一个 OpenPGP 密钥,以使用 Sequoia PGP 签名软件包 复制链接链接已复制到粘贴板!
要使用 Sequoia PGP 软件签名软件包,您必须首先创建一个 OpenPGP 密钥。
流程
安装 Sequoia PGP 工具:
dnf install sequoia-sq
# dnf install sequoia-sqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成一个 OpenPGP 密钥对:
sq key generate --own-key --userid <key_name>
$ sq key generate --own-key --userid <key_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查生成的密钥对:
sq key list
$ sq key listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导出公钥:
sq cert export --cert-userid '<key_name>' > RPM-PGP-KEY-pmanager
$ sq cert export --cert-userid '<key_name>' > RPM-PGP-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.9.2.2. 配置 RPM ,以使用 Sequoia PGP 签名软件包 复制链接链接已复制到粘贴板!
要使用 Sequoia PGP 软件签名 RPM 软件包,您必须配置 RPM ,以使用 Sequoia PGP,并指定 %_gpg_name 宏。
先决条件
-
您已在您的系统上安装了
rpm-sign软件包。
流程
将
macros.rpmsign-sequoia文件复制到/etc/rpm目录中:cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/
# cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从密钥列表的输出中获取有效的 OpenPGP 密钥指纹值:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 密钥指纹是输出的第一行上的 40 个字符的字符串,例如
7E4B52101EB3DB08967A1E5EB595D12FDA65BA50。在
$HOME/.rpmmacros文件中定义%_gpg_name宏,如下所示:%_gpg_name <key_fingerprint>
%_gpg_name <key_fingerprint>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您也可以使用完整的密钥 ID,而不是指纹。
注意与 GnuPG 不同,Sequoia PGP 仅接受完整的密钥 ID 或指纹。
4.9.2.3. 向 RPM 软件包添加签名 复制链接链接已复制到粘贴板!
软件包通常是在没有签名的情况下构建的。您可以在软件包发布前添加您的签名。
先决条件
- 您已创建了一个 OpenPGP 密钥。如需更多信息,请参阅 为使用 Sequoia PGP 签名软件包创建 OpenPGP 密钥。
- 您为签名软件包配置了 RPM。如需更多信息,请参阅 配置 RPM ,以使用 Sequoia PGP 签名软件包。
-
您已在您的系统上安装了
rpm-sign软件包。
流程
在软件包中添加签名:
rpmsign --addsign <package-name>.rpm
$ rpmsign --addsign <package-name>.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
将 导出的 OpenPGP 公钥 导入到 RPM keyring 中:
rpmkeys --import RPM-PGP-KEY-pmanager
# rpmkeys --import RPM-PGP-KEY-pmanagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示签名密钥的密钥指纹:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 密钥指纹通常是
sq key list --cert-userid <key_name>命令输出中的一个签名子密钥,例如E0BD231AB350AD6802D44C0A270E79FFC39C3B25。验证 RPM 文件是否有相应的签名,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 签名密钥 ID 与密钥指纹的最后部分匹配。