1.3. 在 Tekton Chains 中签名数据的 secret
				集群管理员可以生成密钥对,并使用 Tekton 链来使用 Kubernetes secret 为工件签名。要使 Tekton 链正常工作,加密的密钥和密码必须存在,作为 openshift-pipelines 命名空间中的 signing-secrets secret 的一部分。
			
				目前,Tekton 链支持 x509 和 cosign 签名方案。
			
只使用一个受支持的签名方案。
x509 签名方案
					要将 x509 签名方案与 Tekton 链搭配使用,您必须满足以下要求:
				
- 
						使用 x509.pem结构将私钥存储在signing-secrets中。
- 
						将私钥存储为未加密的 PKCS #8PEM 文件。
- 
						密钥是 ed25519或ecdsa类型。
cosign 签名方案
					要将 cosign 签名方案与 Tekton 链搭配使用,您必须满足以下要求:
				
- 
						使用 cosign.key结构将私钥存储在signing-secrets中。
- 
						使用 cosign.password结构将密码存储在signing-secrets中。
- 
						将私钥存储为 ENCRYPTED COSIGN PRIVATE KEY类型的加密 PEM 文件。
1.3.1. 使用 TektonConfig CR 生成 x509 密钥对
					要将 x509 签名方案用于 Tekton Chains secret,您必须生成 x509 密钥对。
				
					您可以通过将 TektonConfig 自定义资源(CR)中的 generateSigningSecret 字段设置为 true 来生成 x509 密钥对。Red Hat OpenShift Pipelines Operator 生成 ecdsa 类型密钥对: x509.pem 私钥和 x509-pub.pem 公钥。Operator 将密钥存储在 openshift-pipelines 命名空间中的 signing-secrets secret 中。
				
						如果将 generateSigningSecret 字段设置为 false,Red Hat OpenShift Pipelines Operator 会覆盖并破坏 signing-secrets secret 中的任何值。确保您在 secret 之外存储 x509-pub.pem 公钥,以防止密钥被删除。Operator 可以使用后续阶段的密钥验证工件。
					
Red Hat OpenShift Pipelines Operator 不提供以下功能来限制潜在的安全问题:
- 密钥轮转
- 审计密钥使用
- 正确的访问控制键
先决条件
- 
							已安装 OpenShift CLI (oc)实用程序。
- 
							您可以使用 openshift-pipelines命名空间的管理权限登录到 OpenShift Container Platform 集群。
流程
- 运行以下命令来编辑 - TektonConfigCR:- oc edit TektonConfig config - $ oc edit TektonConfig config- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在 - TektonConfigCR 中,将- generateSigningSecret值设置为- true:- 使用 TektonConfig CR 创建 ecdsa 密钥对示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 默认值为false。将值设为true会生成ecdsa密钥对。
 
1.3.2. 使用 cosign 工具签名
					您可以使用 cosign 工具使用带有 Tekton 链的 cosign 签名方案。
				
先决条件
- 已安装 Cosign 工具。有关安装 Cosign 工具的详情,请参考有关 Cosign 的 Sigstore 文档。
流程
- 运行以下命令,生成 - cosign.key和- cosign.pub密钥对:- cosign generate-key-pair k8s://openshift-pipelines/signing-secrets - $ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - Cosign 会提示您输入密码,然后创建一个 Kubernetes secret。 
- 
							将加密的 cosign.key私钥和cosign.password解密密码存储在signing-secretsKubernetes secret 中。确保私钥存储为ENCRYPTED COSIGN PRIVATE KEY类型的加密 PEM 文件。
1.3.3. 使用 skopeo 工具签名
					您可以使用 skopeo 工具生成密钥,并在带有 Tekton 链的 cosign 签名方案中使用它们。
				
先决条件
- 已安装 skopeo 工具。
流程
- 运行以下命令生成公钥/私钥对: - skopeo generate-sigstore-key --output-prefix <mykey> - $ skopeo generate-sigstore-key --output-prefix <mykey>- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 将<mykey>替换为您选择的密钥名称。
 - Skopeo 会提示您输入私钥的密码短语,然后创建名为 - <mykey>.private和- <mykey>.pub的密钥文件。
- 运行以下命令,使用 - base64工具对- <mykey>.pub文件进行编码:- base64 -w 0 <mykey>.pub > b64.pub - $ base64 -w 0 <mykey>.pub > b64.pub- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,使用 - base64工具对- <mykey>.private文件进行编码:- base64 -w 0 <mykey>.private > b64.private - $ base64 -w 0 <mykey>.private > b64.private- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,使用 - base64工具对 passhprase 进行编码:- echo -n '<passphrase>' | base64 -w 0 > b64.passphrase - $ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase- 1 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 将<passphrase>替换为用于密钥对的密码短语。
 
- 运行以下命令,在 - openshift-pipelines命名空间中创建- signing-secretssecret:- oc create secret generic signing-secrets -n openshift-pipelines - $ oc create secret generic signing-secrets -n openshift-pipelines- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令来编辑 - signing-secretssecret:- oc edit secret -n openshift-pipelines signing-secrets - $ oc edit secret -n openshift-pipelines signing-secrets- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 使用以下方法在 secret 的数据中添加编码的密钥: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.3.4. 解决 "secret already exists" 错误
					如果 signing-secret secret 已经填充,则创建此 secret 的命令可能会输出以下出错信息:
				
Error from server (AlreadyExists): secrets "signing-secrets" already exists
Error from server (AlreadyExists): secrets "signing-secrets" already exists您可以通过删除 secret 来解决这个问题。
流程
- 运行以下命令来删除 - signing-secretsecret:- oc delete secret signing-secrets -n openshift-pipelines - $ oc delete secret signing-secrets -n openshift-pipelines- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 重新创建密钥对,并使用您首选的签名方案将其存储在机密中。