SSL 终止与粘性会话
使用 ACM 证书在负载均衡器处卸载 TLS,并在有状态工作负载需要客户端会话保持时启用粘性会话。
SSL 终止与粘性会话 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
负载均衡器上的 SSL/TLS 终止
SSL/TLS 终止是指负载均衡器解密传入的 HTTPS 流量,检查明文 HTTP 请求(用于进行路由决策),然后再选择性地对请求重新加密,再转发到后端。当终止发生在 ALB 上时,应用程序服务器可以从负载均衡器接收未加密的 HTTP 流量,从而简化后端配置。
在负载均衡器上进行终止可以降低应用程序服务器的 CPU 开销(无需为每个连接执行 TLS 握手)、支持基于内容的路由(需要读取 HTTP 标头),并集中管理证书。
AWS Certificate Manager(ACM)集成
AWS Certificate Manager (ACM)可以免费配置、管理和续订 SSL/TLS 证书。ALB 和 NLB 可直接与 ACM 集成:您只需在 HTTPS 侦听器配置中选择 ACM 证书,负载均衡器便会将该证书提供给连接的客户端。
ACM 证书会在到期前自动续订,无需手动续订,也不会因证书过期而停机。对于公有证书,ACM 通过 DNS 验证(Route 53 中的 CNAME 记录)或电子邮件验证来确认域名所有权。对于内部使用,ACM Private CA 可以签发私有证书。
# Request a public certificate in ACM
aws acm request-certificate \
--domain-name api.example.com \
--subject-alternative-names '*.example.com' \
--validation-method DNS \
--region us-east-1
# Create an HTTPS listener using the ACM certificate
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc \
--protocol HTTPS \
--port 443 \
--ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/cert-id \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz服务器名称指示(SNI)
SNI(服务器名称指示)是一种 TLS 扩展,允许单个 IP 地址(因此也允许单个 ALB 或 NLB 侦听器)为不同域名提供多个 TLS 证书。客户端会在 TLS ClientHello 消息中包含其尝试访问的主机名,负载均衡器据此选择适当的证书。
ALB 原生支持 SNI:您可以将多个 ACM 证书关联到单个 HTTPS 侦听器。ALB 会根据客户端的 SNI 主机名自动选择正确的证书。这样无需为每个域名设置单独的侦听器或负载均衡器,即可通过 SSL 实现真正的虚拟主机。
# Add a second certificate to an existing HTTPS listener (SNI)
aws elbv2 add-listener-certificates \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc/lis456 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/second-cert-idSSL 安全策略
ALB 和 NLB 支持可配置的SSL 安全策略,用于控制负载均衡器接受客户端使用的 TLS 协议版本和密码套件。AWS 提供预定义策略(例如 ELBSecurityPolicy-TLS13-1-2-2021-06),并会在发现新的漏洞后更新这些策略。
合规性要求可能规定特定的 TLS 版本:PCI-DSS 3.2.1 要求最低使用 TLS 1.2;许多现代标准建议完全禁用 TLS 1.0 和 1.1。请使用排除已弃用协议和弱密码套件的策略。优先选择包含 TLS 1.3 的策略,以获得前向保密性和更高性能。
# List available SSL policies
aws elbv2 describe-ssl-policies \
--query 'SslPolicies[*].{Name:Name,TLSVersions:SslProtocols}' \
--output table端到端加密与终止的对比
ALB 上有两种不同的 TLS 方式:
- SSL 终止(最常见):ALB 在负载均衡器处解密,然后将普通 HTTP 转发到目标。配置简单,支持检查请求以进行路由,并能降低服务器 CPU 开销。VPC 内的后端流量未加密。
- 端到端 TLS:ALB 解密后,在转发到目标之前重新加密(ALB 与目标之间使用 HTTPS)。这种方式占用更多 CPU,需要在目标上配置证书,但在严格合规场景下可以确保 VPC 内的流量保持加密。
对于处于 TLS 直通模式的 NLB:NLB 完全不解密,而是将原始 TCP 转发到由其处理 TLS 的目标。应用程序服务器负责管理自己的证书。
会话保持:定义与用途
会话保持(也称为会话亲和性)可确保来自同一客户端的所有请求始终路由到目标组中的同一目标。这对于有状态应用程序是必要的,因为此类应用程序会将会话数据存储在各个服务器的内存中,而不是存储在 ElastiCache 等共享缓存中。
如果没有会话保持,无状态负载均衡器可能会将请求 1 发送到服务器 A(该服务器存储会话),再将请求 2 发送到服务器 B(没有会话数据),导致用户看起来像是已退出登录,或丢失购物车内容。会话保持会在会话期间将客户端绑定到特定目标。
ALB 上基于 Cookie 的会话保持
ALB 支持两种会话保持 Cookie:
- 基于持续时间的会话保持(负载均衡器生成的 Cookie):ALB 会生成名为
AWSALB的 Cookie(适用于 ALB),并设置过期时长。Cookie 包含指向目标的加密引用。客户端会在后续请求中发送此 Cookie。 - 基于应用程序的会话保持:使用应用程序已设置的现有 Cookie。ALB 读取您指定的 Cookie 名称,在自己的 Cookie 中生成加密版本,并使用该版本进行会话保持路由,同时保留原始应用程序 Cookie。
请按目标组配置会话保持,持续时间可设置为 1 秒到 7 天。
# Enable duration-based sticky sessions on a target group
aws elbv2 modify-target-group-attributes \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz \
--attributes \
Key=stickiness.enabled,Value=true \
Key=stickiness.type,Value=lb_cookie \
Key=stickiness.lb_cookie.duration_seconds,Value=86400会话保持的缺点
虽然会话保持解决了有状态应用程序的问题,但也会带来一些权衡:
- 负载分布不均:如果某些客户端异常活跃,部分目标可能会接收更多流量,从而违背负载均衡的目的
- 扩展限制:如果保持会话的目标变得不健康,会话就会中断;客户端必须与新目标建立新会话,并丢失内存中的会话数据
- 弹性降低:在缩减事件期间,会话保持会使排空并终止实例变得更加困难
最佳实践:将会话状态外置到 ElastiCache 或 DynamoDB,从而消除对会话保持的需求。这样可以让应用程序真正实现无状态,并支持完整的水平扩展。
NLB TLS 侦听器与直通
NLB 支持在 443 端口(或任何端口)上使用 TLS 侦听器进行 TLS 终止,方式类似于 ALB。NLB 会解密流量,可选择重新加密,然后将流量转发到目标。或者,如果您配置 TCP 侦听器,NLB 也可以直通加密的 TCP 流量而不进行解密;在此模式下,应用程序服务器负责端到端 TLS。
NLB 使用 ACM 进行 TLS 终止时,具备与 ALB 相同的证书管理优势,但不提供 HTTP 层功能。当您需要使用 TLS 终止的静态 IP,或后端协议不是 HTTP(例如自定义 TCP 协议)时,请使用 NLB TLS 终止。
连接排空与会话保持的交互
当保持会话的目标被取消注册(例如在自动扩缩组缩减期间)时,连接排空可以让正在处理的请求完成。但是,仍持有指向排空目标的 AWSALB Cookie 的会话保持客户端所发出的新请求,会被自动分配到新目标;该客户端的会话保持 Cookie 会失效。
取消注册延迟与 Cookie 失效的组合可以确保平稳过渡:现有的长连接请求能够完成,同时这些客户端的新请求也会顺畅地重新路由到健康目标,不会让最终用户看到错误。
SSL 和会话管理的最佳实践
考试相关的最佳实践:
- 使用ACM 证书实现自动续订——绝不要在负载均衡器上手动管理证书
- 使用TLS 1.2+安全策略;为满足 PCI/HIPAA 合规性,禁用 TLS 1.0/1.1
- 优先采用无状态架构(将会话存储在 ElastiCache/DynamoDB 中),而不是使用会话保持
- 使用ALB 上的 SNI,从一个侦听器为多个域名提供服务,而无需在不同负载均衡器上分别配置证书
- 对于严格合规场景(VPC 内的数据必须加密):使用带端到端 TLS 的HTTPS 目标组,而不只是在负载均衡器处终止
快速检查
测试您对本课 AWS 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课中您学到了:使用 ACM 证书的 ALB SSL/TLS 终止可以提供自动续订,并通过 SNI 支持多个域名;SSL 安全策略可以控制 TLS 版本和密码套件,以满足合规性要求;会话保持会将用户路由到同一目标,适用于有状态应用程序,但最好将会话状态外置到 ElastiCache,以替代会话保持。接下来我们将学习自动扩缩组和启动模板。
用 AI 导师学习 AWS Solutions Architect — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 30
- 课程
- 120
常见问题解答
「SSL 终止与粘性会话」课时是免费的吗?
是的 — 「SSL 终止与粘性会话」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「SSL 终止与粘性会话」这节课中我会学到什么?
使用 ACM 证书在负载均衡器处卸载 TLS,并在有状态工作负载需要客户端会话保持时启用粘性会话。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「SSL 终止与粘性会话」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- ALB、NLB 与 GLB:如何选择
- 目标组与运行状况检查
- 监听器规则与基于路径的路由
- SSL 终止与粘性会话