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-key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查生成的密钥对:
gpg --list-keys
$ gpg --list-keys
Copy 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-pmanager
Copy 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>.rpm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
将导出的 OpenPGP 公钥 导入到 RPM 密钥环中:
rpmkeys --import RPM-GPG-KEY-pmanager
# rpmkeys --import RPM-GPG-KEY-pmanager
Copy 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-sq
Copy 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 list
Copy 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-pmanager
Copy 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>.rpm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
将导出的 OpenPGP 公钥 导入到 RPM 密钥环中:
rpmkeys --import RPM-PGP-KEY-pmanager
# rpmkeys --import RPM-PGP-KEY-pmanager
Copy 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 与密钥指纹的最后部分匹配。