手动重新签发 PKI Web 证书

本文档介绍了如何为 Google Distributed Cloud (GDC) 网闸隔离配置 Web 端点手动触发证书重新签发。

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

准备工作

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

申请 IAM 角色

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

请考虑以下账号要求:

  • 您的基础架构操作员群组的成员必须在system命名空间中重新颁发 PKI Web 证书。
  • 平台管理员群组的成员可以在其管理的所有其他命名空间中重新颁发 PKI Web 证书。

准备环境

重新颁发证书

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

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

  1. 将目标 Certificate 的 manual-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) 轮换时,必须为之前已签名的 BYO 证书对新生成的证书签名请求 (CSR) 进行签名。如需了解详情,请参阅为 BYO 证书签名。

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

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

BYO 证书手动轮换示例

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

  • 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"
           }
         ]
       }
     },
     ```
    

在以下示例中,您会看到触发手动轮替的先前已签名的 BYO 证书的输出:

  • 在 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 运行手册中这些部分所述的问题排查步骤进行处理:

  • 对于 subCA errorCode: PLATAUTH2001,请参阅 PLATAUTH-R2001。

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