我的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)
谢谢你的帮助.
根问题
这种意外行为不是因为IIS因为Web加密协议而导致的.
两种主要的Web加密协议是SSL和TLS.这两个协议在将任何请求信息传递给服务器之前协商安全连接.这意味着,在安全请求之后,服务器实际上不会在建立安全连接之后学习主机名.
已创建TLS和SSL的扩展以解决此限制.它被称为SNI(服务器名称识别).问题是服务器和客户端计算机都需要支持此扩展.目前客户端浏览器支持有点不稳定.有关浏览器列表,请参阅SNI文章.
IIS对问题的处理
由于上述主机名限制,IIS不允许您将主机名绑定到HTTPS绑定.IIS无法将HTTPS请求路由到特定主机名,因为它在首次开始协商连接时不知道请求的主机名.
一旦IIS与客户端协商安全连接,并获知其请求的主机名是用于具有HTTPS绑定的站点以外的站点(例如,请求https://sitea.com),IIS可以返回失败代码或尝试优雅地失败.IIS选择后者并尝试通过使用HTTPS绑定提供站点来优雅地失败,即使用户请求其他站点也是如此.
解决方案/解决方法
参考资料
我的大部分信息来自维基百科关于SNI的文章
| 归档时间: |
|
| 查看次数: |
5516 次 |
| 最近记录: |