IIS下具有SSL的多个子域

时间:2009-05-27 17:29:04

标签: iis ssl https subdomain

我目前需要在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中使用每个子域吗? 这根本不可行吗?

谢谢! 丹尼尔

5 个答案:

答案 0 :(得分:17)

  

“我猜测问题在于   事实上我无法指定主机   SSL的标头值“

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

答案 1 :(得分:10)

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

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

但是,在握手期间,会显示服务器证书。 HTTP服务器尚未看到“主机”标头,因此它不知道要发送哪个证书。使用不同的IP地址有效,因为它在SSL下面的IP层可见。


更新:有一个新的TLS扩展,允许客户端指出他们打算在握手期间使用的服务器。 See dlongley's answer了解更多信息。

答案 2 :(得分: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

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

答案 3 :(得分:3)

这可能对你没有帮助,但希望它能提供丰富的信息。

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

OpenSSL提供了回调函数,允许您读取客户端发送的主机名并处理获取相应的证书,但遗憾的是我不知道IIS是否可以这样做。

答案 4 :(得分:0)

在特定情况下,您需要同一个域的2个子域,WildCard证书具有才能工作...我使用通配符证书,因为3年来有几十个站点,没有客户报告了错误

如果您告知证书是“www”,那么您的证书不是真正的通配符证书,或者您遇到某种浏览器缓存问题,或者您使用的是2份证书,而您只更新了一份他们,或者你忘了重新启动服务器,或者..我不知道:)。