获取用于签名验证的公用密钥
使用 GPG 公用密钥来验证 Continuous Deployment (CD) 管道中已签名映像的签名。
您可以获取 GPG 公用密钥,如下所示:
- 使用持续集成 (CI) 管道。
- 使用本地计算机。
使用持续集成 (CI) 管道获取 GPG 公用密钥
-
要获取公用密钥,请在 CI 管道中添加值为 1 的环境变量
print-code-signing-certificate
。 运行 CI 管道后,将在控制台上的build-sign-artifact
阶段中打印 GPG 公用密钥。 然后,可以通过运行以下命令将公用密钥复制到文件中并以 base64 格式对其进行编码:cat copied_key.txt | base64
-
将已编码的密钥复制到持续部署 (CD) 管道中。
使用本地计算机获取 GPG 公用密钥
如果您的密钥环中有 GPG 专用密钥,那么可以直接导出公用密钥。
-
检查您的机器是否具有 GPG 密钥环。 密钥环是允许独立管理这些分组的密钥分组。 有关更多信息,请参阅 使用密钥环将密钥分组在一起。 运行以下命令:
gpg --list-keys /home/user/.gnupg/pubring.kbx ------------------------------- pub rsa3072 2021-04-15 [SC] [expires: 2023-04-15] 88DC11E8FDDF028F02E4184719D6C4C5990F144F uid [ unknown] user name <user.name@email.com> sub rsa3072 2021-04-15 [E] [expires: 2023-04-15]
-
如果计算机上存在 GPG 密钥,请通过运行以下命令来导出 GPG 公用密钥:
gpg --armor --export <Email Address> -----BEGIN PGP PUBLIC KEY BLOCK----- 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 ftfswLBW+es4fQ== =0FYC -----END PGP PUBLIC KEY BLOCK-----
-
导出 GPG 公用密钥后,请以
base64
格式对其进行编码,然后再将其复制到code-signing-certificate
字段。
存储密钥
通过下列其中一种方法向 CD 管道提供 GPG 密钥:
- 将密钥存储在 IBM® Key Protect for IBM Cloud®中。
- 将密钥存储在 IBM Cloud® Secrets Manager中。
- 将密钥直接存储在 CI 工具链中。
请确保以正确的格式复制密钥,以防止发生 CI 管道签名错误。 在以下部分中指定的命令中使用 pbcopy
(OS X) 或 clip
(Windows Git bash) 将关键内容复制到剪贴板。
将密钥存储在 Key Protect 中
在将 GPG 密钥存储在 Key Protect 实例中之前,必须对其进行双 base64
编码。
将 GPG 密钥导出并复制到剪贴板,如下所示:
-
OS X
gpg --armor --export <Email Address> | base64 | base64 | pbcopy
-
windows
gpg --armor --export <Email Address> | base64 -w0 | base64 -w0 | clip
-
Linux
gpg --armor --export <Email Address> | base64 | base64
-
在 IBM Cloud 控制台中,选择要在其中存储生成的 GPG 密钥的 Key Protect 实例。
-
单击 添加 图标
以向实例添加新密钥。
-
选择 导入您自己的密钥 选项。
-
选择密钥类型作为 标准密钥。
-
在 密钥名称 字段中提供相应的名称。 稍后可以使用此名称来检索存储的 GPG 密钥。
-
复制您在 密钥材料 字段中导出的密钥。
复制密钥并将其粘贴到 密钥资料 字段中时,请确保密钥末尾没有多余的行。
-
展开 高级选项 部分,然后选择 选择密钥环 选项作为缺省选项。
-
通过单击 添加密钥将密钥添加到密钥保护。
图 1。 将密钥添加到密钥保护
有关 Key Protect的更多信息,请参阅 关于 Key Protect。
将密钥存储在 Secrets Manager 中
必须先对 GPG 密钥进行单个 base64
编码,然后才能将其存储在 Secrets Manager 实例中。
-
导出 GPG 密钥并将其复制到剪贴板。
-
OS X
gpg --armor --export <Email Address> | base64 | pbcopy
-
windows
gpg --armor --export <Email Address> | base64 -w0 | clip
-
Linux
gpg --armor --export <Email Address> | base64
-
-
在 IBM Cloud 控制台中,选择要在其中存储在先前步骤中生成的 GPG 密钥的 Secrets Manager 实例。
-
单击 添加 图标
以向实例添加新密钥。
-
选择 其他密钥类型 选项。
图 2。 其他私钥类型 -
选择密钥类型作为 标准密钥。
-
在 名称 字段中提供相应的名称。 稍后可以使用此名称来检索存储的 GPG 密钥。
-
选择 私钥值 选项,并在 私钥值 字段中粘贴先前导出的密钥。
复制密钥并将其粘贴到 密钥值 字段中时,请确保密钥末尾没有多余的行。
-
通过单击 添加将密钥添加到 Key Protect 实例。
图 3。 添加密钥
有关 Secrets Manager的更多信息,请参阅 Secrets Manager入门。
导出专用密钥并将其直接存储在 CI 管道中
仅将此方法用于测试。 使用 keyprotect
或 secrets manager
来存储密钥。
必须先对 GPG 密钥进行单个 base64
编码,然后才能将其存储为安全管道属性。
将 GPG 密钥安全地存储在 Key Protect 或 Secrets Manager 实例中,如下所示:
-
OS X 或 Linux
gpg --armor --export <Email Address> | base64
-
windows
gpg --armor --export <Email Address> | base64 -w0