6

I have multiple sites running on my IIS, now for one of the websites (SiteB) we need to support ssl requests. I have enabled it editing bindings for the website, but the problem is when I selected protocol SSL editing bindings HostName field is disabled, being unable to set hostname to respond to https request, this causes that all sites of my IIS if are requested with https:// loads web site of siteB.

For example my bidings are the next

Site A

 IP  Port HostName
 *     80 www.sitea.com

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

If I type https://www.siteb.com in my browser it works correctly, but if I type https://www.sitea.com in the browser, siteb webpage is loaded with the hostname of sitea.

How Can I make that only https://www.siteb.com responds to https requests on my IIS?

I have tried with command appcmd too but It't doesnt work.

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

Thanks for your help.

4

2 回答 2

8

根本问题
这种意外行为与其说是因为 IIS,不如说是因为 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 请求

参考资料
我的大部分信息来自关于 SNI 的 Wikipedia 文章

于 2013-06-23T06:33:54.040 回答
1

我们运行具有多个需要 SSL 的站点的网络服务器,没有问题。

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

于 2013-06-23T17:16:44.827 回答