IBM Cloud Docs
生成 GPG 密钥

生成 GPG 密钥

在将工件部署到生产之前,必须对由 IBM Cloud DevSecOps 持续集成工具链构建并记录在库存中的工件进行签名。 持续集成管道使用 Skopeo 作为缺省工具来提供工件签名功能。

自动或手动创建并存储由 DevSecOps 持续集成管道使用的 GPG 密钥。

自动生成 GPG 密钥

使用此方法,模板将为您生成 GPG 密钥。 通过完成以下步骤,输入密钥生成的 名称电子邮件:

  1. 转至 工件签名,然后单击 新建

    图像签名
    图 1。 工件签名

  2. 在该窗口中,将使用工具链名称和电子邮件标识来预填充 nameemail 字段。 更改名称和电子邮件标识以反映您的 GPG 密钥需求。 您还可以通过选择此框将密钥存储在私钥提供程序中。

    更改名称和电子邮件
    图 2。 更改名称和电子邮件

  3. 生成密钥后,您可以将其复制以供参考。

    图像签名证书
    图 3 工件签名证书

复制的密钥为 base64 格式。 解码 密钥,然后再将其导入到 密钥环echo <encoded_gpg_key> | base64 --decode

手动生成 GPG 密钥

下载并安装 GPG 命令行工具

下载并安装适用于您操作系统的 GPG 命令行工具。 转至 GnuPG 二进制发行版 部分,以下载适用于您的操作系统的工具。

Mac OS X

  • 下载并安装 Mac GPG
  • 验证已安装的 GPG 的版本。 从命令行,运行下列命令:
$ gpg --version
gpg (GnuPG) 2.3.1
libgcrypt 1.9.3
Copyright (C) 2021 Free Software Foundation, Inc.
  • 对于 2.3.1之前的 GPG 版本,可能无法使用 -- passphrase = '' 选项。 在这种情况下,您可以通过在提示时按 Enter 键来省略以下对话框中的密码。

Windows™

  • 下载并安装 GitBash (对于 base64 编码是必需的)。
  • 验证已安装的 GPG 的版本。 在 Git bash 命令提示符中运行以下命令:
$ gpg --version
gpg (GnuPG) 2.2.27
libgcrypt 1.8.7
Copyright (C) 2021 g10 Code GmbH

生成 GPG 密钥

如果 generate-key 命令打开一个要求口令的对话框,请将口令和字段留空。 这是映像签名的 (skopeo) 实用程序的限制,其中管道无法接受使用口令保护的专用密钥。 如果在创建期间提供口令,那么您的管道将无法对证书进行解码,而您的管道将在映像签名步骤中失败。

Mac OS X 和 Linux™

从 shell 提示符运行以下命令:

gpg --pinentry-mode loopback --passphrase='' --generate-key
  • 输入您的姓名和电子邮件地址。
  • 输入 O 以启动密钥创建。
  • 生成密钥后,选择选项 O

Windows™

GPG 版本> 1.4

从 Git bash 命令提示符,运行以下命令:

gpg --pinentry-mode loopback --passphrase='' --generate-key
  • 实名 字段中输入您的姓名。
  • 电子邮件地址中输入您的电子邮件地址。
  • 输入 O 以启动密钥创建。
  • 生成密钥后,选择选项 O

GPG Version < 1.4 (or any failure with previous command)

从 Git bash 命令提示符,运行以下命令:

gpg --gen-key
  • 类型的密钥: 选择缺省选项 (1) RSA 和 RSA (缺省值)
  • keysize: 保留缺省值 (2048)
  • 键有效性: 将缺省值保留为 0。 这是因为值键 0 不会到期。
  • 确认您的选择: 输入 y
  • 实名 字段中输入您的姓名。
  • 电子邮件地址中输入您的电子邮件地址。
  • 输入 O 以启动密钥创建。
  • 生成密钥后,选择选项 O

验证密钥创建

验证是否已创建 GPG 密钥。 从命令提示符,运行以下命令:

gpg --list-keys

确保列出了您的密钥。 Windows 上的示例输出:

$ gpg --list-keys
/c/Users/FredSmith/.gnupg/pubring.gpg
-------------------------------------
pub   2048R/1BB354B5 2021-06-08
uid   Fred Smith <fred@company.com>
sub   2048R/F91C39A6 2021-06-08

导出密钥

此步骤是可选的。 运行此命令以确保可以导出 GPG 密钥。

gpg --export-secret-key <Email Address>

不得直接复制导出的原始密钥。 建议将此步骤中生成的密钥安全地存储在 {{site.data.keyword.keymanagementserviceshort}} 实例或 {{site.data.keyword.secrets-manager_short}} 实例中。 请参阅以下部分以获取更多详细信息。

存储密钥

必须通过下列其中一种方式向 CI 管道提供 GPG 密钥:

  • 存储在 {{site.data.keyword.keymanagementservicefull}} 中
  • 存储在 {{site.data.keyword.secrets-manager_full}} 中
  • 直接存储在 CI 工具链中

请确保以正确的格式复制密钥,以防止由于导入失败而发生 CI 管道签名错误。 在以下命令中使用 pbcopy (Mac OS X) 或 clip (Windows Git bash) 将密钥内容复制到剪贴板。

将密钥存储在 {{site.data.keyword.keymanagementserviceshort}} 中

导出 GPG 密钥并将其复制到剪贴板。

需要对 GPG 密钥进行双 base64 编码,然后才能将其存储在 {{site.data.keyword.keymanagementserviceshort}} 实例中。

OS X

gpg --export-secret-key <Email Address> | base64 | base64 | pbcopy

Windows™

gpg --export-secret-key <Email Address> | base64 -w0 | base64 -w0 | clip

Linux™

gpg --export-secret-key <Email Address> | base64 | base64
  1. 在 {{site.data.keyword.cloud_notm}} 控制台中,选择要在其中存储从先前步骤生成的 GPG 密钥的 {{site.data.keyword.keymanagementserviceshort}} 实例。

  2. 单击 添加 + 图标以向实例添加新密钥。

  3. 选择 导入您自己的密钥 选项。

  4. 选择 选择密钥类型 作为 标准密钥

  5. 密钥名称 字段中指定相应的名称。 稍后可通过此密钥名称检索存储的 GPG 密钥。

  6. 复制先前在 密钥材料 字段中导出的密钥。

    确保在复制密钥并将其粘贴到 密钥资料 字段中时,密钥末尾没有多余的行。

  7. 选择 选择密钥环 选项作为缺省值。

  8. 单击 添加密钥 以将密钥添加到 密钥保护

    将密钥添加到密钥保护
    图 4。 将密钥添加到密钥保护

有关 {{site.data.keyword.keymanagementserviceshort}}的更多信息,请参阅 {{site.data.keyword.keymanagementserviceshort}} 文档

将密钥存储在 {{site.data.keyword.secrets-manager_short}} 中

在将 GPG 密钥存储在 {{site.data.keyword.secrets-manager_short}} 实例中之前,需要 GPG 密钥的单个 base64 编码。

导出 GPG 密钥并将其复制到剪贴板。

OS X

gpg --export-secret-key <Email Address> | base64 | pbcopy

Windows™

gpg --export-secret-key <Email Address> | base64 -w0 | clip

Linux™

gpg --export-secret-key <Email Address> | base64
  1. 在 {{site.data.keyword.cloud_notm}} 控制台中,选择要在其中存储从先前步骤生成的 GPG 密钥的 {{site.data.keyword.secrets-manager_short}} 实例。

  2. 单击 添加 + 图标以向实例添加新密钥。

  3. 选择 其他密钥类型 选项。

    其他私钥类型
    图 5。 其他私钥类型

  4. 选择选项 选择密钥类型标准密钥 类型。

  5. 名称 字段中提供相应的名称。 稍后可通过此名称检索存储的 GPG 密钥。

  6. 选择 私钥值 选项,并在 私钥值 字段中粘贴先前导出的密钥。

    确保在复制密钥并将其粘贴到 密钥值 字段中时,密钥末尾没有额外的行。

  7. 通过单击 添加 图标将密钥添加到 {{site.data.keyword.keymanagementserviceshort}} 实例。

    添加密钥
    图 6。 添加密钥

有关 {{site.data.keyword.secrets-manager_short}} 的更多信息,请参阅 {{site.data.keyword.secrets-manager_short}} 入门

导出专用密钥并将其直接存储在 CI 管道中

建议不要使用此方法,应仅用于试验。 使用 Key ProtectSecrets Manager 来存储密钥。 有关更多信息,请参阅 配置密钥库

将 GPG 密钥作为安全管道属性存储之前,需要 GPG 密钥的单个 base64 编码。

将 GPG 密钥安全地存储在 {{site.data.keyword.keymanagementserviceshort}} 或 {{site.data.keyword.secrets-manager_short}} 实例中。

Mac OS X/ Linux™

gpg --export-secret-key <Email Address> | base64

Windows™

gpg --export-secret-key <Email Address> | base64 -w0