问题排查步骤取决于所使用的 SSL 证书类型。
对 Google 管理的证书进行问题排查
对于 Google 管理的证书,状态类型有两种:
- 托管状态
- 域状态
托管状态
如需检查证书状态,请运行以下命令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(name,managed.status)"
“代管状态”的值如下所示:
托管状态 | 说明 |
---|---|
PROVISIONING |
Google 管理的证书已创建, Google Cloud 正在与证书授权机构合作签发该证书。 从 DNS 和负载均衡器配置的更改传播到整个互联网开始,预配 Google 管理的证书最多可能需要 60 分钟。如果您最近更新了 DNS 配置,则更改可能需要大量时间才能完全传播。有时,全球传播需要长达 72 小时,但一般只需几个小时。如需详细了解 DNS 传播,请参阅传播更改。 如果证书保持为 |
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 证书中所述的所有步骤。之后,您可以删除预配永久失败的证书。 |
RENEWAL_FAILED |
由于负载均衡器或 DNS 配置出现问题,Google 管理的证书续订失败。如果代管式证书中的任何网域或子网域未使用 A/AAAA 记录指向负载均衡器的 IP 地址,则续订过程将失败。现有证书可继续提供服务,但会很快过期。检查您的配置。 如果状态仍为 如需详细了解证书续期,请参阅 Google 管理的 SSL 证书续期。 |
域状态
如需检查网域状态,请运行以下命令:
gcloud compute ssl-certificates describe CERTIFICATE_NAME \ --global \ --format="get(managed.domainStatus)"
下表介绍了网域状态的值。
域状态 | 说明 |
---|---|
PROVISIONING |
系统已为网域创建 Google 管理的证书。 Google Cloud 正与证书授权机构合作以签发证书。 |
ACTIVE |
网域已成功验证以预配证书。如果 SSL 证书用于多个网域,则只有在所有网域都为 ACTIVE 状态且证书的代管状态也为 ACTIVE 时才能预配证书。 |
FAILED_NOT_VISIBLE |
尚未完成网域的证书预配。可能是以下某个问题:
PROVISIONING , Google Cloud 会继续重试预配,即使网域状态为 FAILED_NOT_VISIBLE 。 |
FAILED_CAA_CHECKING |
由于您的网域的 CAA 记录存在配置问题,证书预配失败。确保您已按照正确的流程操作。 |
FAILED_CAA_FORBIDDEN |
由于您的网域的 CAA 记录未指定 Google Cloud 需要使用的证书授权机构 (CA),证书预配失败。确保您已按照正确的流程操作。 |
FAILED_RATE_LIMITED |
由于证书授权机构的证书签发请求具有速率限制,证书预配失败。您可以 预配新证书、切换为使用新证书并删除之前的证书,或者联系Google Cloud 支持团队。 |
代管式证书续期
为帮助确保您的证书不会在续订流程的网域验证步骤中失败,请查看 DNS A 和 AAAA 记录的要求。
多视角网域验证
Google Cloud 会定期向证书授权机构 (CA) 请求 Google 管理的证书,以便对其进行续订。Google Cloud 用于续订证书的 CA 使用一种多视角网域验证方法,称为多视角颁发确证 (MPIC)。 在此过程中,证书授权机构会通过检查网域的 DNS 设置并尝试与网域 IP 地址后面的服务器联系,来验证网域控制。 这些验证会从互联网上的多个视角进行。如果验证流程失败,由 Google 管理的证书将无法续订。因此,您的负载均衡器会向客户端提供已过期的证书,导致浏览器用户遇到证书错误,API 客户端遇到连接失败。
为了防止针对配置有误的 DNS 记录出现多视角网域验证失败,请注意以下事项:
- 您的网域和任何子网域的 DNS A 记录 (IPv4) 和 DNS AAAA (IPv6) 记录仅指向与负载均衡器的转发规则关联的 IP 地址。如果记录中存在任何其他地址,可能会导致验证失败。
- CA 会对 DNS 记录进行验证,并从多个位置查询 DNS 记录。确保您的 DNS 提供商对所有全球网域验证请求的响应一致。
- 使用 GeoDNS(根据请求位置返回不同的 IP 地址)或基于位置的 DNS 政策可能会导致响应不一致,并导致验证失败。如果您的 DNS 提供商使用 GeoDNS,请停用它,或者确保所有区域都返回相同的负载均衡器的 IP 地址。
- 您必须在 DNS 配置中明确指定负载均衡器的 IP 地址。 中间层(例如 CDN)可能会导致难以预料的状况。IP 地址必须可直接访问,且请求路径中不需要任何重定向、防火墙或 CDN。如需了解详情,请参阅本文档中的 CDN 后端的负载均衡器部分。
- 我们建议您使用自己选择的 DNS 全球传播检查工具,以验证所有相关 DNS 记录是否在全球范围内正确且一致地解析。
验证配置更改
配置 DNS 记录后,您可以通过创建新证书并将其与现有证书一起连接到负载均衡器,来验证这些记录是否正确。此步骤会强制立即与 CA 进行证书配置检查,以便您在几分钟内验证配置更改。否则,自动续订现有的证书可能需要几天或几周的时间,从而导致您的设置不确定。
如果证书状态变为 ACTIVE
,则表示证书已颁发,从而确认您的 DNS 配置正确无误。此时,我们建议您移除之前的证书,以免同一网域有两个单独的证书。此过程不会中断流向负载均衡器的流量。
新证书可用作验证工具 - 创建证书可确认使用 MPIC 的多视角网域验证是否适用于您的设置。
CDN 后端的负载均衡器
对于已启用 CDN 的负载均衡器,请求路径中的某些第三方 CDN 提供商可能会导致验证请求失败。如果 CDN 提供商正在主动代理 HTTP(S) 流量,则可能会发生这种情况。
在这种情况下,我们建议您将证书迁移到 Certificate Manager,并使用 DNS 授权方法来配置 Google 管理的证书。后一种方法不需要 CA 与您的负载均衡器联系。
对自行管理的 SSL 证书进行问题排查
本指南介绍如何排查自行管理的 SSL 证书的配置问题。
证书无法解析
Google Cloud 要求证书采用 PEM 格式。如果证书采用 PEM 格式,请检查以下内容:
您可以使用以下 OpenSSL 命令验证证书(将 CERTIFICATE_FILE
替换为您的证书文件的路径):
openssl x509 -in CERTIFICATE_FILE -text -noout
如果 OpenSSL 无法解析您的证书,请执行以下操作:
- 请联系 CA 寻求帮助。
- 新建私钥和证书。
缺少公用名或主题备用名称
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 客户端将含任何过期中间证书的链视为无效,并显示警告。
要解决此问题,请执行以下操作:
- 等待 CA 切换到新的中间证书。
- 向它们请求新证书。
- 使用新密钥重新上传新证书。
您的 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.
从目标代理中移除 SSL 证书
以下步骤演示了如何移除关联到目标 https 代理的单个 SSL 证书:
将 target-https-proxy 导出到一个临时文件中。
gcloud compute target-https-proxies export TARGET_PROXY_NAME > /tmp/proxy
修改
/tmp/proxy
文件并移除以下行:sslCertificates: - https://www.googleapis.com/compute/v1/projects/...
导入
/tmp/proxy
文件。gcloud compute target-https-proxies import TARGET_PROXY_NAME \ --source=/tmp/proxy
可选:删除 SSL 证书。
gcloud compute ssl-certificates delete SSL_CERT_NAME
请替换以下内容:
TARGET_PROXY_NAME
:目标 https 代理资源的名称。SSL_CERT_NAME
:SSL 证书的名称。