为啥不能通过 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 重定向的主要内容,如果未能解决你的问题,请参考以下文章

谷歌云存储 CNAME URL 重定向

Grails 重定向控制器从 https 切换到 http。为啥?

php Cname 重定向

Cloudflare从非主域重定向到Github页面

Sendgrid 集成:如何在与 CNAME 重定向相同的域上托管 AASA 文件

为啥我不能重定向到索引?