在应用程序负载均衡器中使用 TLS 进行双向身份验证
双向 TLS 身份验证是传输层安全性协议(TLS)的一种变体。传统 TLS 在服务器和客户端之间建立安全通信,其中服务器需要向其客户端提供其身份。借助双向 TLS,负载均衡器在协商 TLS 的同时协商客户端和服务器之间的双向身份验证。当您将双向 TLS 与应用程序负载均衡器结合使用时,可以简化身份验证管理并减少应用程序的负载。
通过将双向 TLS 与应用程序负载均衡器结合使用,您的负载均衡器可以管理客户端身份验证,以帮助确保只有受信任的客户端才能与您的后端应用程序通信。使用此功能时,应用程序负载均衡器使用来自第三方证书颁发机构(CA)的证书或使用 AWS Private Certificate Authority(PCA)(可选)通过吊销检查对客户端进行身份验证。应用程序负载均衡器将客户端证书信息传递到后端,您的应用程序可以使用该信息进行授权。通过在应用程序负载均衡器中使用双向 TLS,您可以为使用已建立库的基于证书的实体获得内置、可扩展、托管的身份验证。
应用程序负载均衡器的双向 TLS 提供了以下两个选项来验证您的 X.509v3 客户端证书:
注意:不支持 X.509v1 客户端证书。
双向 TLS 传递:当您使用双向 TLS 传递模式时,应用程序负载均衡器会使用 HTTP 标头将整个客户端证书链发送到目标。然后,通过使用客户端证书链,您可以在您的应用程序中实现相应的负载均衡器身份验证和目标授权逻辑。
双向 TLS 验证:当您使用双向 TLS 验证模式时,应用程序负载均衡器会在负载均衡器协商 TLS 连接时为客户端执行 X.509 客户端证书身份验证。
要开始使用传递在应用程序负载均衡器中使用双向 TLS,您只需要将侦听器配置为接受来自客户端的任何证书即可。要使用双向 TLS 进行验证,您必须执行以下操作:
创建新的信任存储资源。
上传您的证书颁发机构(CA)捆绑包和(可选)吊销列表。
将信任存储附加到配置为验证客户端证书的侦听器。
有关使用应用程序负载均衡器配置双向 TLS 验证模式的分步过程,请参阅 在应用程序负载均衡器上配置双向 TLS。
在应用程序负载均衡器上开始配置双向 TLS 之前
在应用程序负载均衡器上开始配置双向 TLS 之前,请注意以下事项:
- 配额
应用程序负载均衡器包括与您 AWS 账户中使用的信任存储、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-----
接受(有效)的证书示例:
-
单一证书(PEM 编码):
# comments -----BEGIN CERTIFICATE----- Base64–encoded certificate -----END CERTIFICATE-----
-
多个证书(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 格式的 notBefore
和 notAfter
日期。
标头内容示例:
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
应用程序负载均衡器的连接日志
Elastic Load Balancing 提供了连接日志,用于捕获有关发送到应用程序负载均衡器的请求的属性。连接日志包含客户端 IP 地址和端口、客户端证书信息、连接结果以及正在使用的 TLS 密码等信息。然后可以使用这些连接日志来查看请求模式和其他趋势。
要了解有关连接日志的更多信息,请参阅 应用程序负载均衡器的连接日志