手动重新签发 PKI Web 证书

本文档介绍了如何手动触发 Google Distributed Cloud (GDC) 气隙 Web 端点的证书重新签发。

本文档适用于平台管理员群组中想要管理 PKI 网络证书的读者。如需了解详情,请参阅 GDC 网闸隔离配置文档的受众群体

准备工作

在手动重新签发 Web 证书之前,您必须拥有必要的权限并准备好环境。

申请 IAM 角色

如需在命名空间中创建、更新和删除 PKI Web 证书,请与组织 IAM 管理员联系,请求授予 Web TLS Certificate Admin (web-tls-cert-admin) 角色。

请注意以下账号要求:

  • 您的基础架构运维人员群组的成员必须在系统命名空间中重新签发 PKI 网络证书。
  • 平台管理员群组的成员可以在他们管理的所有其他命名空间中重新签发 PKI Web 证书。

准备环境

重新签发证书

您可以通过更新注解来手动重新签发证书。如果默认证书签发方发生更改,除非证书即将过期,否则 Distributed Cloud 不会自动重新签发由之前的默认证书签发方签名的证书。

如需手动触发证书重新签发,请使用 kubectl CLI 执行以下步骤:

  1. 将目标 Certificatemanual-reissuance 注解设置为 requested。以下示例更新了 istio-system 命名空间中使用的当前默认证书签发者的 default-wildcard-cert 证书:

    kubectl annotate --overwrite certificate.pki.security.gdc.goog
    default-wildcard-cert -n istio-system
    pki.security.gdc.goog/manual-reissuance='requested'
    
  2. 在重新签发证书期间,您可能会看到 in-progress 注解值处于过渡状态。等待 manual-reissuance 注解值显示为 finished

    kubectl -n istio-system get
    certificate.pki.security.gdc.goog/default-wildcard-cert -ojson | jq -r '
    .metadata.annotations."pki.security.gdc.goog/manual-reissuance"'
    

    输出类似于以下内容:

    finished
    
  3. 验证证书颁发者;它必须与证书规范中提及的颁发者一致,或者(如果未指定)颁发者必须与当前的默认颁发者一致:

    kubectl -n istio-system get certificate.pki.security.gdc.goog/default-wildcard-cert -ojson | jq -r '
    .status.issuedBy'
    

    输出类似于以下内容:

    {
      "name": "byo-cert-issuer",
      "namespace": "pki-system"
    }
    

自带证书手动轮替

当您触发并完成手动自带证书 (BYO cert) 轮换时,必须为之前已签名的自带证书对新生成的证书签名请求 (CSR) 进行签名。如需了解详情,请参阅为自带证书签名

在轮替期间,Distributed Cloud 会创建新的私钥和公钥对。这会导致之前上传的签名证书与新的 CSR 不兼容。如果证书规范自初次上传后未发生变化,则之前上传的证书会继续使用,直到过期为止。如果规范发生变化,则会发生以下事件之一:

  • Distributed Cloud 使用现有的匹配证书。
  • 回退证书授权机构 (CA) 颁发新证书。

自带证书手动轮换示例

在以下示例中,您会看到之前已签名的自带证书触发了手动轮换:

  • byoCertStatus 显示证书 type 值为 Ready
  • reason 值是 Issued,其 lastTransitionTime 值比之前的值更早:

    {
     "byoCertStatus": {
       "csrStatus": {
         "conditions": [
           {
             "lastTransitionTime": "2024-05-03T22:38:43Z",
             "message": "",
             "observedGeneration": 2,
             "reason": "WaitingForSigning",
             "status": "False",
             "type": "Ready"
           }
         ],
         "csr": "LS0tLS1CRUdJTiBDRVJ..."
       },
       "signedCertStatus": {
         "conditions": [
           {
             "lastTransitionTime": "2024-05-03T22:38:43Z",
             "message": "RawSubjectPublickKeyInfo does not match with the CSR",
             "observedGeneration": 2,
             "reason": "Rejected",
             "status": "False",
             "type": "Ready"
           }
         ]
       }
     },
     ```
    

在以下示例中,您会看到之前已签名的自带证书在触发手动轮换时的输出:

  • signedCertStatus 中,reason 字段显示 Rejected,因为之前签名的证书在轮替后不再与新的 CSR 匹配。
  • CSR reason 声明 WaitingForSigning

    "conditions": [
      {
        "lastTransitionTime": "2024-05-03T08:42:10Z",
        "message": "Certificate is issued",
        "observedGeneration": 2,
        "reason": "Issued",
        "status": "True",
        "type": "Ready"
      }
    ],
    "errorStatus": {
      "errors": [
        {
          "code": "PLATAUTH2002",
          "message": "Waiting for CSR signing"
        }
      ],
      "lastUpdateTime": "2024-05-03T22:38:43Z"
    },
    "issuedBy": {
      "name": "byo-cert-issuer",
      "namespace": "pki-system"
    }
    }
    

    管理证书签名提醒

对于初始签发、轮替和过期时的证书签名提醒,您的 IO 必须按照 PKI 运行手册中以下部分记录的问题排查步骤来解决:

  • 对于子 CA 错误代码:PLATAUTH2001,请参阅 PLATAUTH-R2001

  • 对于自带证书错误代码:PLATAUTH2002,请参阅 PLATAUTH-R2002