在应用程序负载均衡器中使用 TLS 进行双向身份验证 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

在应用程序负载均衡器中使用 TLS 进行双向身份验证

双向 TLS 身份验证是传输层安全性协议(TLS)的一种变体。传统 TLS 在服务器和客户端之间建立安全通信,其中服务器需要向其客户端提供其身份。借助双向 TLS,负载均衡器在协商 TLS 的同时协商客户端和服务器之间的双向身份验证。将双向 TLS 与应用程序负载均衡器结合使用时,可以简化身份验证管理并降低应用程序的负载。

通过使用双向 TLS,您的负载均衡器可以管理客户端身份验证,从而帮助确保只有受信任的客户端才能与您的后端应用程序通信。使用此功能时,负载均衡器将使用来自第三方证书颁发机构(CA)的证书或使用 Amazon 私有证书颁发机构(PCA)(可选)通过吊销检查对客户端进行身份验证。负载均衡器会使用 HTTP 标头将客户端证书信息传递到后端,您的应用程序可以将该信息用于授权。

适用于应用程序负载均衡器的双向 TLS 提供了以下两个 X.509v3 客户端证书验证选项:

  • 双向 TLS 传递:负载均衡器在不作验证的情况下将整个客户端证书链发送到目标。目标负责验证客户端证书链。然后通过使用客户端证书链,您可以在应用程序中实现负载均衡器身份验证和目标授权逻辑。

  • 双向 TLS 验证:负载均衡器会在负载均衡器协商 TLS 连接时为客户端执行 X.509 客户端证书身份验证。

要使用双向 TLS 传递模式,必须将侦听器配置为接受来自客户端的证书。要使用双向 TLS 进行验证,请参阅在应用程序负载均衡器上配置双向 TLS

在应用程序负载均衡器上开始配置双向 TLS 之前

在应用程序负载均衡器上开始配置双向 TLS 之前,请注意以下事项:

限额

应用程序负载均衡器包括与您 Amazon 账户中使用的信任存储、CA 证书和证书吊销列表的数量相关的某些限制。

有关更多信息,请参阅 Quotas for your Application Load Balancers

证书要求

应用程序负载均衡器支持以下证书用于双向 TLS 身份验证:

  • 支持的证书:X.509v3

  • 支持的公钥:RSA 2K – 8K 或 ECDSA secp256r1、secp384r1、secp521r1

  • 支持的签名算法:SHA256、384、512 与 RSA/SHA256、384、512 与 EC/SHA256、384、512 哈希与 RSASSA-PSS 以及 MGF1

CA 证书捆绑包

以下内容适用于证书颁发机构(CA)捆绑包:

  • 应用程序负载均衡器批量上传每个证书颁发机构(CA)证书捆绑包。应用程序负载均衡器不支持上传单个证书。如果需要添加新证书,则必须上传证书捆绑包文件。

  • 要替换 CA 证书捆绑包,请使用 ModifyTrustStore API。

证书传递顺序

当您使用双向 TLS 传递时,应用程序负载均衡器会插入标头以将客户端证书链呈现给后端目标。呈现顺序从叶证书开始,以根证书结束。

会话恢复

对应用程序负载均衡器使用双向 TLS 传递或验证模式时,不支持会话恢复。

HTTP 标头

在使用双向 TLS 协商客户端连接时,应用程序负载均衡器使用 X-Amzn-Mtls 标头发送证书信息。有关更多信息和示例标头,请参阅 HTTP 标头和双向 TLS

CA 证书文件

CA 证书文件必须满足以下要求:

  • 证书文件必须使用 PEM(隐私增强邮件)格式。

  • 证书内容必须包含在 -----BEGIN CERTIFICATE----------END CERTIFICATE----- 边界内。

  • 注释必须以 # 字符开头,并且不得包含任何 - 字符。

  • 不能有任何空行。

不接受(无效)的证书示例:

# comments Certificate: Data: Version: 3 (0x2) Serial Number: 01 Signature Algorithm: ecdsa-with-SHA384 Issuer: C=US, O=EXAMPLE, OU=EXAMPLE, CN=EXAMPLE Validity Not Before: Jan 11 23:57:57 2024 GMT Not After : Jan 10 00:57:57 2029 GMT Subject: C=US, O=EXAMPLE, OU=EXAMPLE, CN=EXAMPLE Subject Public Key Info: Public Key Algorithm: id-ecPublicKey Public-Key: (384 bit) pub: 00:01:02:03:04:05:06:07:08 ASN1 OID: secp384r1 NIST CURVE: P-384 X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment, Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 00:01:02:03:04:05:06:07:08 X509v3 Subject Alternative Name: URI:EXAMPLE.COM Signature Algorithm: ecdsa-with-SHA384 00:01:02:03:04:05:06:07:08 -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE-----

接受(有效)的证书示例:

  1. 单一证书(PEM 编码):

    # comments -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE-----
  2. 多个证书(PEM 编码):

    # comments -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- # comments -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE-----

HTTP 标头和双向 TLS

本节介绍在使用双向 TLS 与客户端协商连接时应用程序负载均衡器用于发送证书信息的 HTTP 标头。应用程序负载均衡器使用的特定 X-Amzn-Mtls 标头取决于您指定的双向 TLS 模式:传递模式或验证模式。

有关应用程序负载均衡器支持的其他 HTTP 标头的信息,请参阅 HTTP 标头和 Application Load Balancer

传递模式的 HTTP 标头

对于传递模式下的双向 TLS,应用程序负载均衡器使用以下标头。

此标头包含连接中呈现的整个客户端证书链的 URL 编码 PEM 格式,其中 +=/ 作为安全字符。

标头内容示例:

X-Amzn-Mtls-Clientcert: -----BEGIN%20CERTIFICATE-----%0AMIID<...reduced...>do0g%3D%3D%0A-----END%20CERTIFICATE-----%0A-----BEGIN%20CERTIFICATE-----%0AMIID1<...reduced...>3eZlyKA%3D%3D%0A-----END%20CERTIFICATE-----%0A

验证模式的 HTTP 标头

对于验证模式下的双向 TLS,应用程序负载均衡器使用以下标头。

此标头包含叶证书序列号的十六进制表示形式。

标头内容示例:

X-Amzn-Mtls-Clientcert-Serial-Number: 03A5B1

此标头包含颁发者可分辨名称(DN)的 RFC2253 字符串表示形式。

标头内容示例:

X-Amzn-Mtls-Clientcert-Issuer: CN=rootcamtls.com,OU=rootCA,O=mTLS,L=Seattle,ST=Washington,C=US

此标头包含主题可分辨名称(DN)的 RFC2253 字符串表示形式。

标头内容示例:

X-Amzn-Mtls-Clientcert-Subject: CN=client_.com,OU=client-3,O=mTLS,ST=Washington,C=US

此标头包含 ISO8601 格式的 notBeforenotAfter 日期。

标头内容示例:

X-Amzn-Mtls-Clientcert-Validity: NotBefore=2023-09-21T01:50:17Z;NotAfter=2024-09-20T01:50:17Z

此标头包含叶证书的 URL 编码 PEM 格式,其中 +=/ 作为安全字符。

标头内容示例:

X-Amzn-Mtls-Clientcert-Leaf: -----BEGIN%20CERTIFICATE-----%0AMIIG<...reduced...>NmrUlw%0A-----END%20CERTIFICATE-----%0A

公开证书颁发机构(CA)主题名称有助于客户端确定在双向 TLS 身份验证期间将接受的证书,从而增强身份验证过程。

启用“公开 CA 主题名称”后,应用程序负载均衡器将根据所关联的信任存储区公开其信任的证书颁发机构(CA)主题名称列表。当客户端通过应用程序负载均衡器连接到目标时,该客户端会收到可信 CA 主题名称列表。

在 TLS 握手期间,当应用程序负载均衡器请求客户端证书时,将会在证书请求消息中包含可信 CA 区分名称(DN)列表。这有助于客户端选择与所公开 CA 主题名称相匹配的有效证书,从而简化身份验证过程并减少连接错误。

您可以在新侦听器和现有侦听器上启用“公开 CA 主题名称”。有关更多信息,请参阅 添加 HTTPS 侦听器

应用程序负载均衡器的连接日志

Elastic Load Balancing 提供了连接日志,用于捕获有关发送到应用程序负载均衡器的请求的属性。连接日志包含客户端 IP 地址和端口、客户端证书信息、连接结果以及正在使用的 TLS 密码等信息。然后可以使用这些连接日志来查看请求模式和其他趋势。

要了解有关连接日志的更多信息,请参阅 应用程序负载均衡器的连接日志