【问题标题】:Different SSL-certificates for different parts of site网站不同部分的不同 SSL 证书
【发布时间】:2011-04-03 19:47:45
【问题描述】:
我在 example.com 上有一个站点,它从 s.example.com(亚马逊云端发行版)加载其所有静态组件。
现在我想让 example.com 的一些页面使用 https,所以我想我会为 example.com 购买 ssl 证书,但是由于页面从 s.example.com 加载图像和其他内容 https由于某些组件未加密,因此会中断。
是否可以为 s.example.com 购买第二个证书?我问的原因是因为购买两个单域证书比购买通配符证书便宜得多。
【问题讨论】:
标签:
ssl
https
amazon-s3
amazon-cloudfront
【解决方案1】:
这取决于两个主机是否运行在相同的服务器和IP地址(使用虚拟主机)上。
简单的方法是能够在两个不同的 IP 地址(可能是同一台机器)上托管 example.com 和 s.example.com,在这种情况下,您可以为每个地址配置不同的证书。
如果您被限制为两个名称只有一个 IP 地址(和端口),如果您想使用两个不同的证书,则需要使用 Server Name Indication (SNI) 扩展,它是相对较新的(并且可能并非所有浏览器都支持,但它似乎适用于最近的浏览器)。
如果您不能使用 SNI,则需要相同的证书同时对 example.com 和 s.example.com 有效,这可以通过将两个 DNS 条目放在主题备用名称中来实现扩展名,或者如果两个主机的模式合适,也可以使用通配符。这两个选项可能比使用商业 CA 的两个不同证书更昂贵。
之后,就像@ring0 已经说过的那样,使用https:// 链接链接到页面内容(img...)。
【解决方案2】:
各种(子)域的各种证书的问题是您必须拥有一个域的专用 IP。这是由于 SSL 设计 - 建立第一个 SSL 连接并在此时验证证书。服务器此时不知道要出示哪个证书。只有在成功握手后,才会发送带有域名的 HTTP 请求。
因此,如果您希望覆盖两个域并且它们都位于相同的 IP 地址上,则必须购买通配符证书。
【解决方案3】:
只要页面内的所有组件都是 http 或全部是 https,您应该能够运行具有不同 https://域 的页面,而不会收到来自浏览器的警告。
<img src="https://example.com/a.jpg"/>
<img src="https://s.example.com/b.jpg"/>
您必须使各种证书保持最新。