【发布时间】:2016-01-24 12:30:26
【问题描述】:
我有一个在 AWS 上运行的网站,需要 SSL。该网站具有根据访问的子域必须通过白色标记的功能。例如,当访问 www.a.the-site.com 时,网站看起来与从 www.b.the-site.com 访问时不同,但它是处理两个 url 的同一虚拟主机。我使用一个指向 EC2 实例的 ELB(在这个阶段只有一个实例)这在正常 http 上运行时效果很好。
我按照 AWS 上的分步教程(http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html 和 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-create-https-ssl-load-balancer.html#configure-https-listener)生成密钥(为了便于参考,下面列出了步骤)并从 GoDaddy 获得了证书。 (在 GoDaddy 网站的证书申请流程中粘贴 CSR 后,会显示正确的 CN)。购买的证书是通配符证书,用于支持不同的子域。我使用AWS网站界面在ELB上申请了Certificate,没有提示任何错误,但是现在通过https访问网站时,浏览器出现SSL错误:
“本网站提供的安全证书是针对不同网站的地址颁发的。”
调查https://www.sslshopper.com 上的证书显示以下内容:
它表明没有一个通用名称匹配,但链中的通用名称是正确的 (*.the-site.com)
我还可以发布创建私钥和 CSR 所遵循的步骤,但我没有收到任何指示这些不正确的迹象。似乎 CN *.the-site.com 无法解析 www.a.the-site.com。任何人都可以对此有所了解吗?
【问题讨论】:
-
这是正确的行为。通配符 SSL 证书中的
*仅覆盖/匹配一级主机名,因此a.example.com将匹配但www.a.example.com将不匹配。您的解决方案(解决方法)将配置您的平台以获取传入的Host:标头,如果找到www.,将其剥离,然后使用Location: https://a.example.com重定向浏览器301 Moved Permanently,以便“www”链接在在没有 https 的情况下使用。发布的 HTTPS 链接需要排除 www 前缀。
标签: ssl amazon-ec2 https amazon-elb