AWS CDK Route53与证书配置问题:根域名SSL无法正常工作
解决AWS CDK中根域名SSL协议错误问题
你的问题核心是SSL证书未覆盖根域名,同时CloudFront分发的域名别名也未包含根域名,导致访问example.com时没有对应的有效证书,触发SSL协议错误。
问题分析
- 当前ACM证书仅配置了
*.example.com,通配符证书默认不匹配根域名example.com,必须显式将根域名加入证书的域名列表。 - CloudFront的
viewerCertificate别名只设置了*.example.com,未包含根域名,导致CloudFront无法为根域名请求提供正确的证书。
解决方案
修改以下两处代码:
1. 更新ACM证书配置
将证书同时包含根域名和通配符子域名:
// TLS certificate const certificate = new acm.DnsValidatedCertificate( this, "SiteCertificate", { domainName: siteDomain, // 根域名作为主域名 subjectAlternativeNames: ["*." + siteDomain], // 添加通配符子域名 hostedZone: zone, region: "us-east-1", // CloudFront仅认可此区域的证书 } ); const certificateArn = certificate.certificateArn;
2. 更新CloudFront ViewerCertificate的别名
在aliases数组中同时加入根域名和通配符域名:
const viewerCertificate = cloudfront.ViewerCertificate.fromAcmCertificate( { certificateArn: certificateArn, env: { region: Aws.REGION, account: Aws.ACCOUNT_ID, }, node: this.node, stack: parent, metricDaysToExpiry: () => ... // 保留原有逻辑 }, { sslMethod: cloudfront.SSLMethod.SNI, securityPolicy: cloudfront.SecurityPolicyProtocol.TLS_V1_1_2016, aliases: [siteDomain, "*." + siteDomain], // 同时包含根域名和通配符 } );
3. 可选优化Route53 www记录
原www的Cname记录指向根域名,虽然能工作,但更直接的方式是指向CloudFront分发域名,减少解析层级:
new route53.CnameRecord(this, "SiteWWWAliasRecord", { recordName: "www." + siteDomain, domainName: distribution.distributionDomainName, // 直接指向CloudFront域名 zone, });
验证步骤
部署修改后的CDK栈后:
- 等待ACM证书完成DNS验证(通常几分钟)
- 等待CloudFront分发更新完成(约15-20分钟)
- 访问
example.com和www.example.com,确认SSL连接正常
内容的提问来源于stack exchange,提问作者Armen Babakanian
相关产品推荐
相关产品推荐

