生成 GPG 密钥
在将工件部署到生产之前,必须对由 IBM Cloud DevSecOps 持续集成工具链构建并记录在库存中的工件进行签名。 持续集成管道使用 Skopeo 作为缺省工具来提供工件签名功能。
自动或手动创建并存储由 DevSecOps 持续集成管道使用的 GPG 密钥。
自动生成 GPG 密钥
使用此方法,模板将为您生成 GPG 密钥。 通过完成以下步骤,输入密钥生成的 名称 和 电子邮件:
-
转至 工件签名,然后单击 新建。
图 1。 工件签名 -
在该窗口中,将使用工具链名称和电子邮件标识来预填充 name 和 email 字段。 更改名称和电子邮件标识以反映您的 GPG 密钥需求。 您还可以通过选择此框将密钥存储在私钥提供程序中。
图 2。 更改名称和电子邮件 -
生成密钥后,您可以将其复制以供参考。
图 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
-
在 {{site.data.keyword.cloud_notm}} 控制台中,选择要在其中存储从先前步骤生成的 GPG 密钥的 {{site.data.keyword.keymanagementserviceshort}} 实例。
-
单击 添加 + 图标以向实例添加新密钥。
-
选择 导入您自己的密钥 选项。
-
选择 选择密钥类型 作为 标准密钥。
-
在 密钥名称 字段中指定相应的名称。 稍后可通过此密钥名称检索存储的 GPG 密钥。
-
复制先前在 密钥材料 字段中导出的密钥。
确保在复制密钥并将其粘贴到 密钥资料 字段中时,密钥末尾没有多余的行。
-
选择 选择密钥环 选项作为缺省值。
-
单击 添加密钥 以将密钥添加到 密钥保护。
图 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
-
在 {{site.data.keyword.cloud_notm}} 控制台中,选择要在其中存储从先前步骤生成的 GPG 密钥的 {{site.data.keyword.secrets-manager_short}} 实例。
-
单击 添加 + 图标以向实例添加新密钥。
-
选择 其他密钥类型 选项。
图 5。 其他私钥类型 -
选择选项 选择密钥类型的 标准密钥 类型。
-
在 名称 字段中提供相应的名称。 稍后可通过此名称检索存储的 GPG 密钥。
-
选择 私钥值 选项,并在 私钥值 字段中粘贴先前导出的密钥。
确保在复制密钥并将其粘贴到 密钥值 字段中时,密钥末尾没有额外的行。
-
通过单击 添加 图标将密钥添加到 {{site.data.keyword.keymanagementserviceshort}} 实例。
图 6。 添加密钥
有关 {{site.data.keyword.secrets-manager_short}} 的更多信息,请参阅 {{site.data.keyword.secrets-manager_short}} 入门。
导出专用密钥并将其直接存储在 CI 管道中
建议不要使用此方法,应仅用于试验。 使用 Key Protect
或 Secrets 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