Certificate Manager 的工作原理

证书管理器使用灵活的映射机制,可以精细地控制您可以分配哪些证书,以及如何为您环境中的每个域名提供这些证书。该机制包括以下实体:

  • 证书
  • 证书映射
  • 证书映射条目
  • 网域授权

下图说明了对于负载均衡器转发规则中指定的典型目标代理,这些实体之间的关系:

Certificate Manager 实体。
Certificate Manager 实体(点击可放大)。

证书管理器支持目标 HTTPS 代理和目标 SSL 代理。如需详细了解这些代理类型之间的差异,请参阅使用目标代理

如需了解 Certificate Manager 支持的证书类型,请参阅部署概览

证书

默认情况下,证书代表为特定域名或网域通配符颁发的 X.509 传输层安全协议 (TLS) (SSL) 证书。

证书管理器支持以下类型的证书:

  • Google 管理的证书是 Google Cloud 为您获取和管理的证书。
  • 自行管理的证书是您自行获取、预配和续订的证书。

当您使用受大众信任的 CA 颁发证书时,CA 会将关联网域的相关信息发布到可公开访问的 Certificate Transparency 日志中。这是所有受大众信任的 CA 采用的标准证书颁发流程的一部分,适用于 Google 管理的证书和自行管理的证书。但是,如果您使用 Certificate Authority Service 来颁发 Google 管理的证书,则 Certificate Manager 不会将任何信息发布到 Certificate Transparency 日志。

如需了解详情,请参阅证书透明度

如需了解如何使用 Certificate Manager 部署证书,请参阅部署概览

Google 管理的证书

为您的网站和应用管理由 Google 管理的 TLS (SSL) 证书是一项复杂且耗时的任务,通常涉及手动配置和定期维护。Certificate Manager 服务旨在通过提供集中式平台来帮助您简化此过程。您可以将颁发和续用证书的责任委托给 Certificate Manager,从而腾出时间来处理其他重要任务。

您可以使用基于负载均衡器或基于 DNS 的授权来验证相关网域所有权。Certificate Manager 支持 Google 管理的 RSA。

默认情况下,Google CA 会颁发 Google 管理的证书。在颁发或续订新的 Google 管理的证书时,它会使用新生成的私钥。如果您无法从 Google CA 为特定网域获取证书,Certificate Manager 会回退到 Let's Encrypt CA。例如,Google CA 可能会拒绝为该网域颁发证书,或者您的 CA 授权记录明确禁止 Google CA 为该网域颁发证书。

不支持仅限客户端身份验证。

如需了解如何限制可以为您的网域颁发证书的 CA,请参阅指定可以颁发您的 Google 管理的证书的 CA

请注意,Google 管理的区域级证书(预览版)仅支持基于 DNS 的授权,并且可从 Google CA 获取证书。

由 Certificate Authority Service 颁发的 Google 管理的证书

如果您想使用自己的信任链,而不是依赖 Google 批准的公共 CA 来颁发证书,则可以将证书管理器配置为改用 Certificate Authority Service 中的 CA 池作为证书颁发者。如需详细了解 CA 池,请参阅创建 CA 池

自行管理的证书

如果您的业务需求不允许使用 Google 管理的证书,您可以上传由外部 CA 颁发的证书及其关联密钥。您负责手动颁发和续订自行管理的证书。

借助证书管理器,您还可以在安全 Web 代理代理和区域级负载平衡器上部署自行管理的区域级证书。

证书映射

证书映射会引用一个或多个证书映射条目,以将特定证书分配给特定主机名。证书映射条目还定义了负载均衡器在建立客户端连接时遵循的选择逻辑。您可以将证书映射与多个目标代理相关联,以便在多个负载平衡器中重复使用。

如果客户端请求证书映射中指定的主机名,则负载平衡器将传送映射到该主机名的证书。否则,负载平衡器会传送主证书。如需了解详情,请参阅证书选择逻辑

证书映射条目

证书映射条目是为特定域名提供的证书列表。您可以为不同的域名(例如网域或子网域)定义不同的证书集。例如,您可以上传 ECDSA 和 RSA 证书,并将它们映射到同一域名。当客户端连接到该域名时,负载均衡器会协商在握手期间提供给客户端的证书类型。

网域授权

借助证书管理器,您可以证明对要为其颁发 Google 管理的证书的网域的所有权,如下表所述。

负载均衡器授权 DNS 授权
设置复杂性 不需要执行额外的配置步骤或更改 DNS 配置。 您需要创建 DNS 授权,并将相应的 CNAME 记录添加到您的 DNS 配置中。
网络安全 负载均衡器必须可通过端口 443 从互联网完全访问,包括证书提供的所有网域的 DNS 配置。不适用于其他配置。 适用于高复杂的配置,例如 443 以外的端口以及目标代理前面的 CDN 层。
配置速度 只有在负载均衡器已完全设置完毕且正在处理网络流量后,您才能预配证书。 您可以在目标代理准备好处理网络流量之前提前预配证书。

如需了解证书管理器如何使用每种方法验证网域所有权,请参阅 Google 管理的证书的网域授权

证书颁发配置

证书颁发配置是一项资源,可让 Certificate Manager 使用您自己的 Certificate Authority Service 实例中的 CA 池来颁发 Google 管理的证书,而不是 Google CA 或 Let's Encrypt CA。通过它,您可以指定多个用于控制证书颁发和失效的参数,并为以这种方式颁发的证书选择密钥算法。

信任配置

信任配置是一项资源,表示证书管理器中用于双向 TLS 身份验证场景的公钥基础架构 (PKI) 配置。它封装了单个受信任证书存储区,而该受信任证书存储区包含信任锚以及(可选)一个或多个中间证书。

如需详细了解双向 TLS 身份验证,请参阅 Cloud Load Balancing 文档中的双向 TLS 身份验证

信任配置资源可封装信任存储区、信任锚和中间证书实体。

受信任证书存储区

信任存储区表示证书管理器中用于双向 TLS 身份验证场景的信任密钥配置。它封装了单个信任锚以及(可选)一个或多个中间证书。

信任锚

信任锚代表用于双向 TLS 身份验证场景的单个根证书。它封装在受信任证书存储区中。

中间证书

中间证书表示由根证书签名的单个中间证书,或封装信任存储区中引用的、用于双向 TLS 身份验证场景的中间证书。

一个或多个中间证书可以封装在信任存储区中,具体取决于您的 PKI 配置。对于每个连接请求的信任评估,除了请求本身中指定的中间证书列表之外,信任配置中指定的所有中间证书也会包含在内。

需要许可名单的证书

(可选)如果您需要使用自签名证书、已过期或其他无效证书,或者如果您无权访问根证书和中间证书,则可以将该证书添加到 allowlistedCertificates 字段中的信任配置。您无需信任存储区即可将证书添加到许可名单。

将证书添加到许可名单意味着,只要证书可解析、已建立私钥所有权证明,并且满足证书的 SAN 字段限制条件,该证书就始终被视为有效。

证书选择逻辑

概括来讲,负载均衡器会按如下方式选择证书:

  1. 客户端发起握手。在此步骤中,它会为负载均衡器提供一系列加密算法,用于完成握手,还可选择提供主机名。
  2. 负载均衡器根据客户端提供的主机名和配置的证书映射条目来选择证书以完成安全握手。决定负载均衡器选择哪个证书的因素如下:

    • 完全匹配的主机名:如果客户端提供的主机名与预配的证书映射中的条目完全匹配,则负载均衡器会选择相应的证书。

    • 通配符主机名匹配:如果客户端的主机名与任何条目都不匹配,但与证书映射条目中的通配符主机名匹配,则负载均衡器会从该条目中选择对应的证书。例如,配置为 *.myorg.example.com 的通配符条目涵盖 myorg.example.com 网域下的第一级子网域。

    • 主机名不匹配,但有预配置的主证书映射条目:在没有主机名匹配项或匹配的预配证书映射条目的情况下,负载均衡器会选择预配置的主证书映射条目。

    • 握手失败:如果负载均衡器由于以下原因找不到匹配的证书,则握手失败:

      • 客户端提供的主机名与所有已配置的证书映射条目中指定的任何完全匹配或通配符主机名都不匹配,或者根本不提供主机名。
      • 找不到匹配的主证书映射条目,或者如果您尚未配置主证书映射条目。

证书优先级

负载均衡器根据以下内容选择证书映射条目中的证书:

  • 证书类型。如果连接的客户端支持更安全的 ECDSA 证书,则负载均衡器会优先考虑这些证书,而非 RSA 证书。如果客户端未指示支持 ECDSA 证书,则负载均衡器将改为传送 RSA 证书。
  • 证书大小。负载均衡器会按从小到大的顺序确定证书的优先级。

通配符域名

以下规则适用于通配符域名:

  • 只有具有 DNS 授权的 Google 管理的证书和具有 CA 服务的 Google 管理的证书才支持通配符域名。具有负载均衡器授权的 Google 管理的证书不支持通配符域名。
  • 如果条目中同时定义了完全匹配和通配符,则前者优先于通配符。例如,如果您为 www.myorg.example.com*.myorg.example.com 配置了证书映射条目,则针对 www.myorg.example.com 的连接请求始终会选择 www.myorg.example.com 的条目,即使 *.myorg.example.com 的条目也存在也是如此。
  • 通配符域名只能匹配到一个子网域级别。例如,针对 host1.myorg.example.com 的连接请求为 *.myorg.example.com 选择证书映射条目,但不为 host1.hosts.myorg.example.com 选择一个证书映射条目。

Public CA

如需使用 Certificate Manager 的公共 CA 功能,您必须熟悉以下概念:

  • ACME 客户端。自动证书管理环境 (ACME) 客户端是使用 ACME 协议的证书管理客户端。您的 ACME 客户端必须支持外部帐号绑定 (EAB) 才能与公共 CA 配合使用。

  • 外部帐号绑定 (EAB)。您必须使用外部账号绑定功能将通过 Certificate Manager 公共 CA 使用的每个 ACME 账号绑定到目标 Google Cloud 项目。为此,您必须使用关联到相应 Google Cloud 项目的 Secret 来注册每个 ACME 帐号。如需了解详情,请参阅外部帐号绑定

Public CA 验证

当您使用 Public CA 请求证书时,Certificate Manager 会要求您证明您对该证书中列出的网域的控制权。您可以通过解决各种难题来证明自己对领域的控制权。 在您证明自己对目标网域的控制权后,Public CA 会对域名进行授权。

获得所需授权后,您可以请求仅在特定时间段内有效的证书。此期限过后,您必须解决三种验证类型中的一种来重新验证域名,才能继续请求证书。

验证类型

Public CA 支持以下类型的验证:

  • HTTP 质询。这项挑战涉及在 HTTP 服务器(端口 80)上的已知位置创建一个文件,以供 Public CA 检索和验证。如需了解详情,请参阅 HTTP 质询

  • TLS 应用层协议协商 (ALPN) 验证。要求服务器在端口 443 上的 TLS 协商期间提供特定证书,以证明对网域的控制权。如需了解详情,请参阅 ACME TLS-ALPN 质询扩展程序

  • DNS 验证。需要在指定的位置添加特定的 DNS 记录,以证明对网域的控制权。如需了解详情,请参阅 DNS 验证

如果您使用 HTTP 质询或 TLS-ALPN 质询来验证域名,则客户端只能请求将经过验证的域名包含在证书中。如果您使用 DNS 质询,则客户端还可以请求将该域名的子网域包含在证书中。

例如,如果您使用 DNS 质询来验证 *.myorg.example.com,则通配符证书会自动涵盖 subdomain1.myorg.example.comsubdomain2.myorg.example.com。但是,如果您使用 HTTP 或 TLS-ALPN 质询来验证 myorg.example.com,则客户端只能请求在证书中包含 myorg.example.com,而您无法使用非 DNS 质询验证 *.myorg.example.com

验证解决方案逻辑

公共 CA 质询逻辑如下:

  1. Public CA 提供随机令牌。
  2. 客户端会在明确定义的位置提供令牌。具体位置取决于具体验证方式。
  3. 客户端向 Public CA 表明其已准备好质询。
  4. Public CA 会检查预期位置存在的令牌是否与预期值匹配。

此过程完成后,将对域名进行授权。客户端可以请求包含该域名的证书。每个域名只需解决一次难题。