本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
双向 TLS 身份验证
双向 TLS(传输层安全)身份验证是 TLS 的可选组件,可提供双向对等身份验证。双向 TLS 身份验证在 TLS 的基础上增加了一层安全性,并允许您的服务验证正在建立连接的客户端。
客户端-服务器关系中的客户端还会在会话协商过程中提供 X.509 证书。服务器使用此证书来识别和验证客户端。此过程有助于验证证书是否由可信证书颁发机构 (CA) 颁发,以及该证书是否为有效证书。它还使用证书上的主题备用名称 (SAN) 来识别客户端。
您可以为支持的所有协议启用双向 TLS 身份验证 AWS App Mesh。它们是 TCP、HTTP/1.1、HTTP/2、gRPC。
注意
使用 App Mesh,您可以为来自您的服务的 Envoy 代理之间的通信配置双向 TLS 身份验证。但是,您的应用程序与 Envoy 代理之间的通信未加密。
双向 TLS 身份验证证书
AWS App Mesh 支持双向 TLS 身份验证的两种可能的证书来源。TLS 客户端策略中的客户端证书和侦听器 TLS 配置中的服务器验证可以从以下来源获取:
-
文件系统 - 来自正在运行的 Envoy 代理的本地文件系统的证书。要向 Envoy 分发证书,您需要提供证书链的文件路径和 App Mesh API 的私钥。
-
E@@ nvoy 的秘密发现服务 (SDS) — 实现 SDS 并允许向 Envoy 发送证书的 B s ring-your-own idecar。它们包括 SPIFFE 运行时系统环境 (SPIRE)。
重要
App Mesh 不存储用于双向 TLS 身份验证的证书或私钥。相反,Envoy 会将它们存储在内存中。
配置网格端点
为您的网格端点(例如虚拟节点或网关)配置双向 TLS 身份验证。这些端点提供证书并指定受信任的颁发机构。
为此,您需要为客户端和服务器配置 X.509 证书,并在 TLS 终止和 TLS 来源的验证上下文中明确定义可信机构证书。
- 网格内部的信任
-
服务器端证书在虚拟节点侦听器(TLS 终止)中配置,客户端证书在虚拟节点服务后端(TLS 发起)中配置。作为此配置的替代方案,您可以为虚拟节点的所有服务后端定义默认的客户端策略,然后,如果需要,可以根据需要为特定后端覆盖此策略。虚拟网关只能使用适用于其所有后端的默认客户端策略进行配置。
您可以通过为两个网格的虚拟网关上的入站流量启用双向 TLS 身份验证来配置不同网格之间的信任。
- 网格之外的信任
-
在虚拟网关侦听器中指定服务器端证书以终止 TLS。配置与您的虚拟网关通信的外部服务以提供客户端证书。证书应派生自服务器端证书在虚拟网关侦听器上用于发起 TLS 的相同证书颁发机构 (CA)。
将服务迁移到双向 TLS 身份验证
在 App Mesh 中将现有服务迁移到双向 TLS 身份验证时,请遵循以下准则以保持连接。
迁移服务通过明文进行通信
-
在服务器端点上启用 TLS 配置
PERMISSIVE
模式。此模式允许纯文本流量连接到端点。 -
在服务器上配置双向 TLS 身份验证,指定服务器证书、信任链以及可选的可信 SAN。
-
确认通信是通过 TLS 连接进行的。
-
在您的客户端上配置双向 TLS 身份验证,指定客户端证书、信任链以及可选的可信 SAN。
-
在服务器上启用 TLS 配置的
STRICT
模式。
迁移通过 TLS 通信的服务
-
在您的客户端上配置双向 TLS 设置,指定客户端证书和可信的 SAN(可选)。直到后端服务器请求客户端证书后,才会将其发送到其后端。
-
在服务器上配置双向 TLS 设置,指定信任链和可信的 SAN(可选)。为此,您的服务器会请求客户端证书。
验证双向 TLS 身份验证
您可以参阅传输层安全:验证加密文档,了解 Envoy 究竟是如何发出与 TLS 相关的统计数据的。对于双向 TLS 身份验证,您应该检查以下统计信息:
-
ssl.handshake
-
ssl.no_certificate
-
ssl.fail_verify_no_cert
-
ssl.fail_verify_san
以下两个统计示例共同表明,成功端接到虚拟节点的 TLS 连接都来自提供证书的客户端。
listener.0.0.0.0_15000.ssl.handshake: 3
listener.0.0.0.0_15000.ssl.no_certificate: 0
下一个统计数据示例显示,从虚拟客户端节点(或网关)到后端虚拟节点的连接失败。服务器证书中显示的主题备用名称 (SAN) 与客户端信任的任何 SAN 都不匹配。
cluster.cds_egress_my-mesh_my-backend-node_http_9080.ssl.fail_verify_san: 5
App Mesh 双向 TLS 身份验证演练
-
双向 TLS 身份验证演练
:本演练描述了如何使用 App Mesh CLI 构建具有双向 TLS 身份验证的彩色应用程序。 -
Amazon EKS 基于双向 TLS SDS 的演练
:本演练展示了如何在 Amazon EKS 和 SPIFFE 运行时系统环境 (SPIRE) 中使用基于双向 TLS SDS 的身份验证。 -
亚马逊 EKS 基于双向 TLS 文件的演练
:本演练展示了如何在 Amazon EKS 和 SPIFFE 运行时系统环境 (SPIRE) 中使用基于双向 TLS 文件的身份验证。