SSL 通配符证书和“www”子子域名

SSL 通配符证书和“www”子子域名

我有一个通配符 SSL 证书*.example.com

我正在使用 Nginx,并将所有 HTTP 流量重定向到 HTTPS,同时重写 URL 以删除 www 子域(如果有)。

所以,

  1. http://subdomain.example.com --->https://subdomain.example.com
  2. http://www.subdomain.example.com --->https://subdomain.example.com
  3. https://www.subdomain.example.com --->https://subdomain.example.com
  4. https://subdomain.example.com --->https://subdomain.example.com

但是,由于我的证书是*.example.com,情况 3 在 chrome 中会出现 SSL 错误(“这可能不是您正在寻找的网站!”),但如果您点击它,它会被重定向,一切正常。

我明白原因,因为初始连接是带有 www(2 级子域)的 HTTPS,这与通配符证书上的内容不匹配。

我认为解决方案是获得额外的证书以*.*.example.com覆盖www.*.example.com。但这似乎行不通。我与 Namecheap 和 Comodo 的代理商进行了交谈,他们都说这*.*.example.com是不可能的。

我也遇到了本文其中指出:

SSL 可以与多级通配符一起使用吗?

随着 Firefox 3.5 的发布,所有主流浏览器都只允许单级子域名匹配包含通配符的证书名称,以符合 RFC 2818 的规定。

换句话说,该证书对或*.mydomain.com有效,但对 无效。one.mydomain.comtwo.mydomain.comone.two.mydomain.com

有办法解决这个问题吗?能够覆盖吗www.*.example.com

答案1

通配符证书只能深入一层。您需要获取一个通配符,该通配符还具有所有www.<subdomain>.example.com网站的主题替代名称。这将允许重定向发生。

除了在两级深度子域上放置有效证书之外的任何解决方案都行不通,因为 SSL 握手总是在任何重定向或重写之前发生。

答案2

一个小的解决方法是在建立 SSL 连接之前重写 URL,但你永远不会得到https://www.subdomain.mydomain.com在您获得此域名的证书之前,不会出现任何警告。如下所示:

server {
 listen 111.222.333.444:80;
 server_name www.subdomain.mydomain.com;

 rewrite ^ https://$host$request_uri permanent;
}

server {
 listen 111.222.333.444:443
 server_name subdomain.mydomain.com
 ssl on;
 ...
}

答案3

问题在于通配符证书的工作方式。正如您所看到的,它们只适用于一级子域。要解决这个问题,您需要使用 PTR 记录将 www.subdomain.domain.com 指向 subdomain.domain.com,并且它对服务器应该是不可见的。

相关内容