了解在IIS8上访问UCC证书的XP用户

我有一个单一的IIS网站,主办3个不同的网站,都使用相同的UCC SSL证书。 (我的网站的代码检查主机头本身,以决定哪个网站的变化显示)。

我已经修复了我的XP上的Internet Explorer用户的最致命的错误,那就是禁用IIS中的“要求主题名称指示”字段。 由于当XP用户切换到HTTPS时,如果启用了SNI,他们基本上会在没有任何警告的情况下被踢出网站(不要告诉我的老板)。

所以我完全明白,当一个用户通过HTTPS访问这三个站点中的任何一个共享同一个IP时,他被发送到同一个IIS站点并且服务于UCC证书。 即使XP支持UCC / SAN证书,以便客户端接受证书并按预期显示站点。

现在…忘记所有这些,并考虑第二个非假设的情况。

  • 让我们假装我有两个网站: cats.comdogs.com
  • 他们是不同的网站,并部署在IIS 8中的两个不同的网站。
  • 他们都在同一个UCC SSL证书*
  • SNI被禁用
  • 它们都绑定到相同的IP地址

现在考虑XP用户访问https://cats.com

以下是我理解事情的工作方式:

  • DNS给浏览器返回我的IP – 可以说1.2.3.4
  • 一个HTTPs连接被协商,但是因为XP不知道关于SNI的任何事情,它不是发送一个SSL主机头(或者他们被称为),而是通过IP访问安全站点。
  • 所以IIS会查找与https网站绑定关联的IP,并且实际上会find两个。
  • 比方说,IIS决定只是为您提供第一个 – 所以它给你你所期望的cats.com 。 所以没关系
  • 但可以说,你去https://dogs.com – 你不应该实际上服务的网站cats.com因为XP上的SSL不知道SNI的SSL连接,反正它在IIS中被禁用?

那么你不。 你得到dogs.com。 我已经试过了, cats.comdogs.com都是从Windows XP Internet Explorer 8客户端运行的。

我只是不明白为什么这个工作。 我会期待这种行为只在我的第一种情况下,当他们都共享一个IIS应用程序。

我最好的猜测是IIS 8正在接收主机头,而且足够聪明,可以将其路由到正确的网站,并find一个UCC证书名称。 那是怎么回事?

有人能进一步解释吗?

*只是故意烦扰技术头脑的猫和狗主人;-)

IIS使用HTTP Host:头来确定要提供哪个网站,就像其他任何请求一样。