AWS ALB SSL证书配置问题排查与解决方案

发布时间:2026/10/13 15:55:19
AWS ALB SSL证书配置问题排查与解决方案
1. 问题背景与现象描述上周在为客户部署AWS ALBApplication Load Balancer时遇到了一个典型的SSL证书配置问题当我们在ALB上配置了包含裸域名如example.com和多级子域名如www.example.com的SSL证书后发现通过HTTPS访问裸域名时出现证书错误而访问www子域名则完全正常。这个问题在多个客户环境中反复出现值得专门写一篇排查手册。具体现象表现为浏览器访问https://example.com时提示此网站的安全证书存在问题证书错误详情显示证书仅对www.example.com有效通过openssl s_client验证返回的证书确实不包含裸域名相同证书在Nginx服务器上却能同时支持两种域名访问2. 问题根源分析2.1 ALB的SNI机制特性AWS ALB作为第7层负载均衡器严格遵循SNIServer Name Indication协议。当客户端发起HTTPS请求时客户端在SSL握手阶段通过SNI扩展声明要访问的具体域名ALB根据SNI信息选择对应的证书返回如果证书不匹配请求的域名就会触发证书警告关键点在于ALB不会自动将裸域名和www域名视为等价关系即使它们在DNS解析上指向同一个ALB。2.2 证书域名覆盖范围验证通过openssl检查证书包含的SANSubject Alternative Nameopenssl x509 -in certificate.crt -text -noout | grep DNS典型问题证书输出DNS:www.example.com而正常工作的证书应该显示DNS:example.com, DNS:www.example.com2.3 与Nginx行为的差异对比传统Web服务器如Nginx在证书匹配上更宽松如果没有精确匹配的证书会返回默认的第一个证书很多管理员习惯将www域名证书配置为默认证书浏览器对www和裸域名的关联性有额外宽容处理这种差异导致同样的证书在ALB和Nginx上表现不同。3. 解决方案与实施步骤3.1 证书重新申请最佳实践推荐通过AWS ACM申请证书在AWS Certificate Manager控制台创建新证书在域名字段同时添加example.comwww.example.com选择DNS验证方式比邮件验证更可靠等待验证完成通常5-10分钟重要提示即使使用第三方CA如DigiCert、Lets Encrypt也必须确保证书同时包含裸域名和www域名。3.2 ALB监听器配置要点进入EC2控制台 → 负载均衡器 → 选择目标ALB在监听器选项卡编辑HTTPS监听器确保证书下拉菜单选择了新申请的包含双域名的证书检查默认操作指向正确的目标组配置检查命令aws elbv2 describe-listeners \ --load-balancer-arn arn:aws:elasticloadbalancing:region:account-id:loadbalancer/app/alb-name/id \ --query Listeners[].Certificates3.3 DNS记录配置建议虽然与SSL无关但建议配置规范的DNS解析裸域名A记录 → ALB的DNS名称需使用别名记录www CNAME记录 → 裸域名 示例Route 53配置example.com A ALIAS dualstack.alb-name.region.elb.amazonaws.com www.example.com CNAME example.com4. 验证与测试方法4.1 命令行验证工具使用openssl检查证书链openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -text关键检查点证书有效期包含的SAN域名签发机构是否受信任4.2 在线检测工具推荐SSL Labs测试https://www.ssllabs.com/ssltest/提供完整的证书链分析识别中间证书缺失等问题Why No Padlockhttps://www.whynopadlock.com/检测混合内容问题验证重定向链是否完整4.3 浏览器测试要点Chrome开发者工具 → Security面板查看实际加载的证书检查证书错误详情多浏览器测试Chrome/Firefox/Safari/Edge移动端iOS和Android设备5. 高级场景与疑难排查5.1 通配符证书的特殊考量如果使用*.example.com通配符证书必须明确包含裸域名作为SAN通配符不自动包含裸域名AWS ACM申请时需要额外添加裸域名5.2 多域名证书管理策略对于管理大量域名的场景按业务功能分组申请证书例如api.example.com、app.example.com一组静态站点www.example.com、cdn.example.com另一组设置证书过期监控aws acm list-certificates --query CertificateSummaryList[?NotAfter2024-12-31]5.3 证书自动续期方案推荐采用AWS ACM自动续期ACM证书默认自动续期续期后自动更新到关联的ALB无需人工干预对于第三方证书使用LambdaEventBridge定时检查通过AWS CLI更新证书aws elbv2 modify-listener \ --listener-arn arn:aws:elasticloadbalancing:region:account-id:listener/app/alb-name/id \ --certificates CertificateArnarn:aws:acm:region:account-id:certificate/id6. 性能优化建议启用ALB的TLS 1.3支持在监听器配置选择安全策略时推荐使用ELBSecurityPolicy-TLS13-1-2-2021-06OCSP装订配置ACM证书默认启用第三方证书需确认CA支持会话恢复优化考虑启用ALB的会话票证功能减少SSL握手开销7. 成本控制方案合并证书减少管理开销单个证书最多包含100个域名减少证书数量可降低管理成本合理选择证书类型ACM免费证书满足大多数场景仅特殊需求如EV证书需要购买商业证书监控未使用证书aws acm list-certificates --query CertificateSummaryList[?InUsefalse]8. 安全加固措施禁用老旧TLS版本在监听器安全策略中禁用TLS 1.0/1.1推荐仅启用TLS 1.2/1.3证书透明度日志监控通过Certificate Transparency工具检测异常证书签发定期轮换证书即使自动续期也建议主动轮换每年至少强制更新一次9. 常见错误与解决方案错误现象可能原因解决方案NET::ERR_CERT_COMMON_NAME_INVALID证书不包含请求的域名重新申请包含所有使用域名的证书SSL_ERROR_BAD_CERT_DOMAINSNI配置错误检查ALB监听器证书绑定证书链不完整中间证书缺失通过ACM申请或补全证书链部分设备报错旧设备不支持SNI考虑兼容方案或放弃老旧设备支持10. 监控与告警配置CloudWatch证书过期告警aws cloudwatch put-metric-alarm \ --alarm-name CertificateExpiry-30days \ --metric-name DaysToExpiry \ --namespace AWS/CertificateManager \ --statistic Minimum \ --period 86400 \ --evaluation-periods 1 \ --threshold 30 \ --comparison-operator LessThanOrEqualToThreshold \ --alarm-actions arn:aws:sns:region:account-id:alert-topic自定义健康检查定期从各区域测试HTTPS访问验证证书和HTTP状态码合成监控配置使用AWS Synthetics创建Canary检查关键域名在实际运维中我们发现90%的ALB证书问题都源于SAN配置不全。一个实用的技巧是在申请证书时不仅添加当前需要的域名还预留未来可能用到的子域名如api、mobile等这样可以减少后续证书更新频率。同时建议建立证书资产清单记录每个证书的关联资源、到期时间和负责人信息。