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 软件包签名。

要使用 GNU Privacy Guard (GnuPG)软件签署 RPM 软件包,您必须首先创建一个 OpenPGP 密钥。

先决条件

  • 在您的系统上已安装了 rpm-signpinentry 软件包。

流程

  1. 生成 OpenPGP 密钥对:

    $ gpg --gen-key
    Copy to Clipboard Toggle word wrap
  2. 检查生成的密钥对:

    $ gpg --list-keys
    Copy to Clipboard Toggle word wrap
  3. 导出公钥:

    $ gpg --export -a '<public_key_name>' > RPM-GPG-KEY-pmanager
    Copy to Clipboard Toggle word wrap

4.9.1.2. 配置 RPM 以使用 GnuPG 为软件包签名

要使用 GNU Privacy Guard (GnuPG)软件签署 RPM 软件包,您必须通过指定 %_gpg_name RPM 宏来配置 RPM。

先决条件

流程

  • $HOME/.rpmmacros 目录中定义 %_gpg_name 宏:

    %_gpg_name <key-ID>
    Copy to Clipboard Toggle word wrap

    GnuPG 的有效密钥 ID 值可以是您在创建密钥时提供的密钥指纹、全名或电子邮件地址。

4.9.1.3. 向 RPM 软件包添加签名

软件包通常在没有签名的情况下构建。您可以在软件包发布前添加签名。

先决条件

流程

  • 在软件包中添加签名:

    $ rpmsign --addsign <package-name>.rpm
    Copy to Clipboard Toggle word wrap

验证

  1. 将导出的 OpenPGP 公钥 导入到 RPM 密钥环中:

    # rpmkeys --import RPM-GPG-KEY-pmanager
    Copy to Clipboard Toggle word wrap
  2. 使用 GnuPG 显示密钥 ID:

    $ gpg --list-keys
    [...]
    pub   rsa3072 2025-05-13 [SC] [expires: 2028-05-12]
          A8AF1C39AC67A1501450734F6DE8FC866DE0394D
    [...]
    Copy to Clipboard Toggle word wrap

    密钥 ID 是命令输出中的 40 个字符的字符串,例如 A8AF1C39AC67A1501450734F6DE8FC866DE0394D

  3. 验证 RPM 文件是否具有对应的签名:

    $ rpm -Kv <package_name>.rpm
    <package_name>.rpm:
        Header V4 RSA/SHA256 Signature, key ID 6de0394d: OK
        Header SHA256 digest: OK
        Header SHA1 digest: OK
        Payload SHA256 digest: OK
        MD5 digest: OK
    Copy to Clipboard Toggle word wrap

    签名密钥 ID 与 OpenPGP 密钥 ID 的最后部分匹配。

4.9.2. 使用 Sequoia PGP 签名 RPM 软件包

您可以使用 Sequoia PGP 为 RPM 软件包签名,并确保任何第三方不能更改其内容。

要使用 Sequoia PGP 软件签署软件包,您必须首先创建一个 OpenPGP 密钥。

流程

  1. 安装 Sequoia PGP 工具:

    # dnf install sequoia-sq
    Copy to Clipboard Toggle word wrap
  2. 生成 OpenPGP 密钥对:

    $ sq key generate --own-key --userid <key_name>
    Copy to Clipboard Toggle word wrap
  3. 检查生成的密钥对:

    $ sq key list
    Copy to Clipboard Toggle word wrap
  4. 导出公钥:

    $ sq cert export --cert-userid '<key_name>' > RPM-PGP-KEY-pmanager
    Copy to Clipboard Toggle word wrap

要使用 Sequoia PGP 软件签署 RPM 软件包,您必须将 RPM 配置为使用 Sequoia PGP,并指定 %_gpg_name 宏。

先决条件

  • 在您的系统上已安装了 rpm-sign 软件包。

流程

  1. macros.rpmsign-sequoia 文件复制到 /etc/rpm 目录中:

    # cp /usr/share/doc/rpm/macros.rpmsign-sequoia /etc/rpm/
    Copy to Clipboard Toggle word wrap
  2. 从键列表的输出中获取有效的 OpenPGP 密钥指纹值:

    $ sq cert list --cert-userid '<key_name>'
     - 7E4B52101EB3DB08967A1E5EB595D12FDA65BA50
       - created 2025-05-13 10:33:29 UTC
       - will expire 2028-05-13T03:59:50Z
    
       - [    ✓    ] <key_name>
    Copy to Clipboard Toggle word wrap

    密钥指纹是输出第一行上的 40 个字符的字符串,例如 7E4B52101EB3DB08967A1E5EB595D12FDA65BA50

  3. $HOME/.rpmmacros 文件中定义 %_gpg_name 宏,如下所示:

    %_gpg_name <key_fingerprint>
    Copy to Clipboard Toggle word wrap

    请注意,您也可以使用完整的密钥 ID,而不是指纹。

    注意

    与 GnuPG 不同,Sequoia PGP 仅接受完整的密钥 ID 或指纹。

4.9.2.3. 向 RPM 软件包添加签名

软件包通常在没有签名的情况下构建。您可以在软件包发布前添加签名。

先决条件

流程

  • 在软件包中添加签名:

    $ rpmsign --addsign <package-name>.rpm
    Copy to Clipboard Toggle word wrap

验证

  1. 将导出的 OpenPGP 公钥 导入到 RPM 密钥环中:

    # rpmkeys --import RPM-PGP-KEY-pmanager
    Copy to Clipboard Toggle word wrap
  2. 显示签名密钥的密钥指纹:

    $ sq key list --cert-userid <key_name>
     - 7E4B52101EB3DB08967A1E5EB595D12FDA65BA50
       - user ID: <key_name> (authenticated)
       - created 2025-05-13 10:33:29 UTC
       - will expire 2028-05-13T03:59:50Z
       - usable for signing
       - @softkeys/7E4B52101EB3DB08967A1E5EB595D12FDA65BA50: available, unlocked
    
       - 78E56DD2E12E02CFEEA27F8B9FE57972D6BCEA6F
         - created 2025-05-13 10:33:29 UTC
         - will expire 2028-05-13T03:59:50Z
         - usable for decryption
         - @softkeys/7E4B52101EB3DB08967A1E5EB595D12FDA65BA50: available, unlocked
       - C06E45F8ABC3E59F44A9E811578DDDB66422E345
         - created 2025-05-13 10:33:29 UTC
         - will expire 2028-05-13T03:59:50Z
         - usable for signing
         - @softkeys/7E4B52101EB3DB08967A1E5EB595D12FDA65BA50: available, unlocked
       - E0BD231AB350AD6802D44C0A270E79FFC39C3B25
         - created 2025-05-13 10:33:29 UTC
         - will expire 2028-05-13T03:59:50Z
         - usable for signing
         - @softkeys/7E4B52101EB3DB08967A1E5EB595D12FDA65BA50: available, unlocked
    Copy to Clipboard Toggle word wrap

    密钥指纹通常是 sq key list --cert-userid < key_name&gt; 命令输出中的签名子密钥,例如 E0BD231AB350AD6802D44C0A270E79FFC39C3B25

  3. 验证 RPM 文件是否具有对应的签名,例如:

    $ rpm -Kv <package_name>.rpm
    <package_name>.rpm:
        Header V4 EdDSA/SHA512 Signature, key ID c39c3b25: OK
        Header SHA256 digest: OK
        Header SHA1 digest: OK
        Payload SHA256 digest: OK
        MD5 digest: OK
    Copy to Clipboard Toggle word wrap

    签名密钥 ID 与密钥指纹的最后部分匹配。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat