IIS 7将SSL添加到一个站点,所有其他站点都响应https请求

时间:2013-04-29 10:54:08

标签: iis-7

我的IIS上运行了多个站点,现在我们需要支持ssl请求的其中一个站点(SiteB)。我已启用它为网站编辑绑定,但问题是当我选择协议SSL编辑绑定HostName字段被禁用,无法设置主机名以响应https请求时,这会导致我的IIS的所有站点都被请求使用https ://加载siteB的网站。

例如,我的出价是下一个

Site A

 IP  Port HostName
 *     80 www.sitea.com

Site B
 IP Port Hostname
 *   443 www.siteb.com
 *    80 www.siteb.com

如果我在浏览器中输入https://www.siteb.com它可以正常工作,但如果我在浏览器中输入https://www.sitea.com,则会在siteb网页上加载主机名sitea。

如何才能使https://www.siteb.com响应我的IIS上的https请求?

我也尝试过命令appcmd,但它不起作用。

appcmd set site /site.name:{sitB} /bindings.[protocol='https',bindingInformation='*:443:*'].bindingInformation:*:443:siteB.com 

感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

根本问题
这种意外行为不是因为IIS因为Web加密协议而导致的。

两种主要的Web加密协议是SSL和TLS。这两个协议在将任何请求信息传递给服务器之前协商安全连接。这意味着,在安全请求之后,服务器实际上不会在建立安全连接之后学习主机名。

已创建TLS和SSL扩展以解决此限制。它被称为SNI(服务器名称标识)。问题是服务器和客户端计算机都需要支持此扩展。目前客户端浏览器支持有点不稳定。有关浏览器列表,请参阅SNI文章。

IIS处理问题
正是由于上述主机名限制,IIS不允许您将主机名绑定到HTTPS绑定。 IIS无法将HTTPS请求路由到特定主机名,因为它在首次开始协商连接时不知道请求的主机名。

一旦IIS与客户端协商安全连接,并获知其请求的主机名是针对除HTTPS绑定之外的站点(例如https://sitea.com的请求),IIS可以返回失败代码或试着优雅地失败。 IIS选择后者并尝试通过使用HTTPS绑定提供站点来优雅地失败,即使用户请求其他站点也是如此。

<强>解决方案/变通方法

  • 创建重写规则,将非安全网站的所有HTTPS请求重定向到HTTP。
  • 升级到IIS 8以使用SNI扩展。然后要求访问者升级到支持SNI的浏览器。
  • 让您的安全站点在收到其他域的请求时返回错误消息。
  • 绑定IP地址而不是主机名,因为IIS可以通过IP地址路由HTTPS请求

<强>参考
我的大多数信息来自Wikipedia article on SNI

答案 1 :(得分:2)

我们运行多个站点的Web服务器,这些站点需要SSL而没有问题。

如果我正确理解您的问题 - 您需要设置绑定而不是主机名 - 这将无效。因此,对于我们托管的每个启用SSL的站点,我们需要不同的外部IP地址。然后,在IIS中设置站点时输入该IP地址作为绑定。