对 SSL 证书进行问题排查

问题排查步骤有所不同,具体取决于您使用的是 Google 管理的 SSL 证书还是自行管理的 SSL 证书。

对 Google 管理的证书进行问题排查

Google 管理的 SSL 证书的状态

如需检查证书状态,请运行以下命令:

gcloud beta compute ssl-certificates describe certificate-name \
    --global \
    --format="get(name,managed.status)"

“代管状态”的值如下所示:

托管状态 说明
PROVISIONING Google 管理的证书已创建,Google Cloud 正与证书授权机构合作签发该证书。
预配 Google 管理的证书最多可能需要 60 分钟时间。

如果证书保持为“正在预配”状态,请确保将正确的证书与目标代理关联。您可以通过运行 gcloud compute target-https-proxies describegcloud compute target-ssl-proxies describe 命令对此进行检查。
ACTIVE 您已从证书授权机构获得 Google 管理的 SSL 证书。负载平衡器可能需要再过 30 分钟之后才能使用它。
PROVISIONING_FAILED 即使您的证书确实为 ACTIVE,您也可能会看到 PROVISIONING_FAILED。 请再次检查状态。如果状态依然为 PROVISIONING_FAILED,可能是因为:

Google 管理的证书已创建,但证书授权机构无法签发它。请确保完成使用 Google 管理的 SSL 证书中所述的所有步骤。在成功或状态更改为 PROVISIONING_FAILED_PERMANENTLY 之前,Google Cloud 会重新尝试进行预配。
PROVISIONING_FAILED_PERMANENTLY Google 管理的证书已创建,但由于 DNS 或负载平衡器配置问题,证书授权机构无法签发。这种情况下,Google Cloud 不会重新尝试进行预配。

创建替代性 Google 管理的 SSL 证书,并确保替代性证书已与您的负载平衡器的目标代理相关联。验证或完成使用 Google 管理的 SSL 证书中所述的所有步骤。之后,您可以删除预配永久失败的证书

Google 管理的 SSL 证书的网域状态

如需检查网域状态,请运行以下命令:

gcloud beta compute ssl-certificates describe certificate-name \
    --global \
    --format="get(managed.domainStatus)"

下表介绍了网域状态的值。

域状态 说明
PROVISIONING 系统已为网域创建 Google 管理的证书。 Google Cloud 正与证书授权机构合作以签发证书。
预配 Google 管理的证书最多可能需要 60 分钟时间。
ACTIVE 您已从证书授权机构获得 Google 管理的 SSL 证书。已完成针对此网域进行的预配。负载平衡器可能需要再过 30 分钟之后才能使用证书。
FAILED_NOT_VISIBLE 为网域预配证书失败。可能是以下某个问题: 代管状态为 PROVISIONING 时,Google Cloud 会继续尝试预配证书。
FAILED_CAA_CHECKING 由于您的网域的 CAA 记录存在配置问题,证书预配失败。 请确保已完成使用 Google 管理的 SSL 证书中所述的所有步骤。
FAILED_CAA_FORBIDDEN 由于您的网域的 CAA 记录未指定 Google Cloud 需要使用的证书授权机构,证书预配失败。 请确保已完成使用 Google 管理的 SSL 证书中所述的所有步骤。
FAILED_RATE_LIMITED 由于证书授权机构的证书签发请求具有速率限制,证书预配失败。您可以重新尝试创建替代性 Google 管理的 SSL 证书,也可以与 Google Cloud 支持团队联系。

对自行管理的 SSL 证书进行问题排查

证书无法解析

Google Cloud 要求证书采用 PEM 格式。如果证书采用 PEM 格式,请检查以下内容:

您可以使用以下 OpenSSL 命令验证证书(将 certificate-file 替换为您的证书文件的路径):

openssl x509 -in certificate-file -text -noout

如果 OpenSSL 无法解析您的证书,请执行以下操作:

缺少公用名或主题备用名称

Google Cloud 要求您的证书具有公用名 (CN) 或主题备用名称 (SAN) 特性。如需了解详情,请参阅创建 CSR

如果这两个特性均不存在,则 Google Cloud 会在您尝试创建自行管理的证书时显示如下错误消息:

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 - The SSL certificate is missing a Common Name(CN) or Subject Alternative
   Name(SAN).

私钥无法解析

Google Cloud 要求符合私钥标准、采用 PEM 格式的私钥。

您可以使用以下 OpenSSL 命令验证您的私钥(将 private-key-file 替换为您私钥的路径):

    openssl rsa -in private-key-file -check

出现以下响应表明您的私钥存在问题:

  • unable to load Private Key
  • Expecting: ANY PRIVATE KEY
  • RSA key error: n does not equal p q
  • RSA key error: d e not congruent to 1
  • RSA key error: dmp1 not congruent to d
  • RSA key error: dmq1 not congruent to d
  • RSA key error: iqmp not inverse of q

如需解决此问题,您必须新建私钥和证书

带有密码的私钥

如果 OpenSSL 提示输入密码,您需要先从私钥中移除密码,然后才能将其用于 Google Cloud。您可以使用以下 OpenSSL 命令:

openssl rsa -in private-key-file \
    -out replacement-private-key-file

请将占位符替换为有效值:

  • private-key-file:受密码保护的私钥的路径
  • replacement-private-key-file:您要在其中保存明文私钥副本的文件路径

即将到期的中间证书

如果中间证书在服务器(叶)证书之前过期,则这可能表示您的 CA 未遵循最佳做法。

当中间证书过期时,您在 Google Cloud 中使用的叶证书可能会无效。这取决于 SSL 客户端,如下所示:

  • 某些 SSL 客户端只会查看叶证书的过期时间,而忽略已过期的中间证书。
  • 某些 SSL 客户端将含任何过期中间证书的链视为无效,并显示警告。

要解决此问题,请执行以下操作:

  1. 等待 CA 切换到新的中间证书。
  2. 向它们请求新证书。
  3. 使用新密钥重新上传新证书。

您的 CA 可能还允许对中间证书进行交叉签名。请与您的 CA 联系以进行确认。

RSA 公开指数过大

当 RSA 公开指数大于 65537 时,系统会显示以下错误消息。请务必使用 RFC 4871 中指定的 65537

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 - The RSA public exponent is too large.