Certificate Manager 的运作方式

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

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

下图展示了负载平衡器转发规则中指定的典型目标代理的这些实体之间的关系:

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

Certificate Manager 支持目标 HTTPS 代理和目标 SSL 代理。如需详细了解这些代理类型之间的区别,请参阅使用目标代理

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

证书

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

Certificate Manager 支持以下类型的证书:

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

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

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

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

Google 管理的证书

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

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

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

不支持仅对客户端进行身份验证。

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

请注意,Google 管理的区域级证书仅支持基于 DNS 的授权,并从 Google CA 获取证书。

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

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

自行管理的证书

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

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

证书映射

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

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

证书映射条目

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

网域授权

借助证书管理工具,您可以证明您要为哪些网域颁发 Google 管理的证书(如下表所述)。

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

如需了解 Certificate Manager 如何使用每种方法验证网域所有权,请参阅 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 证书,负载平衡器会优先使用 ECDSA 证书,而不是 RSA 证书。如果客户端未指明支持 ECDSA 证书,负载平衡器会改为提供 RSA 证书。
  • 证书大小。负载平衡器会按从小到大的顺序确定证书的优先级。

通配符域名

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

  • 只有具有 DNS 授权的 Google 管理的证书和具有 CA Service 的 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 的证书映射条目。

公共 CA

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

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

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

公共 CA 的挑战

当您使用公共 CA 请求证书时,Certificate Manager 会要求您证明您对证书中列出的网域的控制权。您可以通过解决验证问题来证明对域名的控制权。在您证明自己对目标网域拥有控制权后,公开 CA 会授权相应域名。

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

验证类型

公共 CA 支持以下类型的质询:

  • HTTP 质询。此质询涉及在 HTTP 服务器(端口 80)上的某个知名位置创建文件,以供公共 CA 检索和验证。如需了解详情,请参阅 HTTP 质询

  • TLS-Application Layer Protocol Negotiation (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. 公共 CA 提供随机令牌。
  2. 客户端会在明确定义的位置提供令牌。具体位置取决于相应挑战。
  3. 客户端向公共 CA 表明已准备好质询。
  4. 公共 CA 会检查预期位置存在的令牌是否与预期值匹配。

此流程完成后,域名将获得授权。客户端可以请求包含该域名的证书。您只需为每个域名解一个验证问题。