20

我目前需要在 SSL 下的同一个域下有 2 个子域。
两个子域(www 和affiliate)都在同一个 IIS 服务器上,在同一个 IP 下,并且每个子域都指定了一个主机头值(www.mydomain.com 和affiliate.mydomain.com)

第一个子域 (www) 是默认的,无论有无 SSL,都可以很好地工作。
第二个子域在 HTTP 下完美运行。

问题是我刚刚为附属子域购买并安装了 SSL 证书,当你转到https://affiliate.mydomain.com时,你会被重定向到http://www.mydomain.com

我猜问题在于我无法为 SSL 指定主机头值?(我通常设置主机头值的对话框底部没有该选项,专用于 SSL)。

我能做些什么呢?我应该将每个子域放在单独的 IP 中吗?这根本不可行吗?

谢谢!丹尼尔

4

5 回答 5

18

“我猜问题在于我无法为 SSL 指定主机头值”

你猜对了。您将需要两个 IP 地址。

于 2009-05-27T17:32:58.493 回答
10

这个问题是 HTTPS 工作方式的基础。

虚拟主机依赖于 HTTP/1.1 中引入的“Host”标头。这是 HTTP 协议的一部分,但从 SSL 协议的角度来看,HTTP 层是“应用程序数据”,直到 SSL 握手完成后才能传输。

但是,在握手期间会提供服务器证书。HTTP 服务器还没有看到“Host”标头,所以它不知道要发送哪个证书。使用不同的 IP 地址是可行的,因为它在 SSL 下的 IP 层可见。


更新:有一个新的 TLS 扩展允许客户端在握手期间指示他们打算使用的服务器。有关更多信息,请参阅 dlongley 的答案

于 2009-05-27T17:38:54.813 回答
5

我不确定您正在运行什么 Web 服务器,但在 Windows Server 2003 上的 IIS 6 中,您可以将主机标头用于 SSL 站点,从而允许它们位于相同的 IP 地址上。

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/596b9108-b1a7-494d-885d-f8941b07554c.mspx?mfr=true

编辑:这仅在证书是通配符证书时才有效。否则,子域“附属”将尝试使用与子域“www”相同的证书,访问者将收到警告。

于 2009-05-27T17:34:56.007 回答
3

这可能对您没有帮助,但希望它提供信息。

一些 TLS 客户端使用的 TLS 协议有一个扩展,称为服务器名称指示 (SNI)。此扩展允许 TLS 客户端指定他们尝试联系的服务器的主机名。因此,当客户端在 TLS 协议中连接并发送 ClientHello 消息时,服务器可以决定使用哪个证书进行响应。这使得虚拟 SSL/TLS 服务器可以在单个 IP 上运行。

OpenSSL 提供回调函数,允许您读取客户端发送的主机名并处理获取适当的证书,但不幸的是,我不知道这是否可以通过 IIS 实现。

于 2010-07-22T17:53:32.503 回答
0

在特定情况下,您需要同一域的 2 个子域,通配符证书必须工作......我使用通配符证书 3 年来为数十个站点,并且没有客户报告错误

如果您有东西告诉证书是“www”,那么您的证书不是真正的通配符证书,或者您遇到某种浏览器缓存问题,或者您正在使用 2 个证书副本并且您只更新了其中一个,或者您忘记重新启动服务器,或者..我不知道:)

于 2009-07-16T10:37:36.990 回答