为啥不能通过 HTTPS 使用 CNAME 重定向
Posted
技术标签:
【中文标题】为啥不能通过 HTTPS 使用 CNAME 重定向【英文标题】:Why isn’t it possible to use a CNAME redirect with HTTPS为什么不能通过 HTTPS 使用 CNAME 重定向 【发布时间】:2012-03-06 20:15:04 【问题描述】:This Google 存储文档页面指出You can use a CNAME redirect only with HTTP, not with HTTPS.
但我看不出有任何原因。谁能解释一下为什么?
【问题讨论】:
我想这是为了增加安全性。我不知道是谁在执行此操作 - DNS、浏览器或 Google 除了下面关于多域证书的答案外,如果您使用 Cloudflare 等服务也是可能的,它除了提供 DNS 服务外,还充当 HTTP(S) 代理和在与服务器建立自己的(HTTP 或 HTTPS - 取决于设置)连接并转发内容之前,终止(解密)来自客户端的 SSL 连接。 【参考方案1】:假设您有 CNAME 记录:
travel-maps.example.com CNAME c.commondatastorage.googleapis.com.
浏览器解析名称travel-maps.example.com
并获取c.commondatastorage.googleapis.com
的IP,然后连接到该地址的443 端口。
具有此 IP 的服务器不可能[1] 拥有 travel-maps.example.com
的正确证书(以及具有此类 CNAME 记录的所有其他域名)。只有example.com
域所有者才能为自己的域获得可信证书。
[1] 除非您将证书上传到 CDN 网络,这是当今的常见功能。
【讨论】:
由于 Apache 可以区分浏览器正在浏览的域(使用 VirtualHost),为什么它不能为每个域提供适当的证书? Google - googleapis.com 的所有者没有 travel-maps.example.com 的证书 使用 CNAME 记录浏览器连接到谷歌 IP,而不是你的 apache。 这个答案清楚地说明了为什么从一个所有者到另一个所有者的 CNAME 不能与 HTTPS 一起使用,但不能说明为什么同一所有者拥有的另一条记录的 CNAME 不能。请描述一下好吗? @kojiro 如果服务器证书将匹配 CNAME 记录(在这种情况下为travel-maps.example.com),SSL 将正常工作。【参考方案2】:有可能!
一个 SSL 证书可以附加多个域。
假设 travel-maps.example.com CNAME c.commondatastorage.googleapis.com。
当两个域都在 SSL 证书列表中时,您的 CNAME 可以使用 HTTPS 重定向。
这就是 CDN 服务提供商(如 Incapsula)与 HTTPS 一起使用的方式。 他们只是为您创建一个“多域”SSL 证书。
您可以在本网站查看演示证书信息。 https://www.incapsula.com/
无论如何,这种 SSL 证书在大多数情况下是用于商业用途的,而且通常非常昂贵。
【讨论】:
那么,如果一个CDN向一个HTTPS站点foo提供服务,是否意味着我不再使用foo提供的证书,而是依赖CDN的证书? 不,您的数据仍然需要在您的服务器和 CDN 服务器之间进行加密。从理论上讲,您可以为您的服务器使用自签名 ssl 证书。以上是关于为啥不能通过 HTTPS 使用 CNAME 重定向的主要内容,如果未能解决你的问题,请参考以下文章
Grails 重定向控制器从 https 切换到 http。为啥?