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

Mar*_*als 6 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
Run Code Online (Sandbox Code Playgroud)

如果我在浏览器中键入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 
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Mar*_*ker 8

根问题
这种意外行为不是因为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请求

参考资料
我的大部分信息来自维基百科关于SNI的文章