问题排查步骤有所不同,具体取决于您使用的是 Google 管理的 SSL 证书还是自行管理的 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 支持团队。 |
代管式证书续期
如果托管证书中的任何网域或子网域未指向负载均衡器的 IP 地址,或者指向 IP 和负载均衡器的 IP,则续订过程将失败。为避免续订失败,请确保您的所有网域和子网域都指向负载均衡器的 IP 地址。
对自行管理的 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 证书的名称。