IIS 8.0 服务器名称指示 (SNI):SSL 可伸缩性

作者:Shaun Eagan

兼容性

版本 说明
IIS 8.0 IIS 8.0 中引入了服务器名称指示。
IIS 7.5 IIS 7.5 不支持服务器名称指示。
IIS 7.0 IIS 7.0 不支持服务器名称指示。

问题

随着更多的电子商务网站上线,以及更多的企业在线上存储和共享敏感文档,托管和扩展安全网站的能力越来越重要。 在 Windows Server 2012 之前,在托管安全站点方面存在一些挑战:

  • SSL 可伸缩性:在多租户环境中(如共享托管)中,Windows Server 上可托管的安全站点数量存在限制,从而导致站点密度较低。
  • IPv4 稀缺性:由于网络终结点只能使用 IP:端口绑定来标识,当租户请求使用标准 SSL 端口 443 时,托管安全站点通常意味着为每个租户提供专用 IP 地址。

解决方案

在 Windows Server 2012 上,IIS 支持服务器名称指示 (SNI),它是一个 TLS 扩展,可将虚拟域作为 SSL 协商的一部分。 这实际上表示虚拟域名或主机名现在可用于标识网络终结点。 此外,高度可缩放的 WebHosting 存储也被创建,用来补充 SNI。 结果是,安全站点密度在 Windows Server 2012 上要高得多,并且它的实现只用了一个 IP 地址。

应当指出的是,若要使用此功能,客户端浏览器必须支持 SNI。 大多数新式浏览器都支持 SNI,但是,Windows XP 上的 Internet Explorer(任何版本)不支持 SNI。

分步说明

先决条件:

  • IIS 8.0 安装在 Windows Server 2012 上。

    • WebHosting 证书存储和 SNI 都是默认 IIS 安装的一部分。 不需要从服务器管理器安装特定的 IIS 功能。
  • 示例证书。

  • \windows\system32\drivers\etc\hosts 已被修改为用于示例站点和证书。 例如,如果证书的 CN 名称为 TAPTesting,则主机文件必须包含:

    127.0.0.1 TAPTesting
    

已知 bug 的解决方法:

在某些情况下,如果在同一台计算机上配置了传统的 SSL 绑定(IP:端口)和 SNI 绑定(主机名:端口),则 IIS 管理器可能会移除非预期的 SSL 绑定。 若要解决此问题并/或确认实际的 SSL 绑定,请使用命令行工具:

netsh http show sslcert

将证书导入 Web 托管存储:

  1. 打开“MMC”。
  2. 在“文件”下,选择“添加/移除管理单元”:
    Screenshot that shows the menu for File in M M C. Add Remove Snap in is highlighted.
  3. 选择证书。 单击“添加”:
    Screenshot that shows the Add or Remove Snap ins dialog box with Certificates selected under Available snap ins.
  4. 选择“计算机帐户”:
    Screenshot that shows the Certificates snap in dialog box. Computer account is selected.
  5. 选择“本地计算机”,然后单击“完成”:
    Screenshot that shows the Select Computer dialog box. Local computer is selected.
  6. 单击“确定”:
    Screenshot that shows the Add or Remove Snap ins.
  7. 在导航窗格下,找到“Web 托管”存储:
    Screenshot that shows Web Hosting highlighted under the Certificates node.
    Web 托管存储的工作方式与个人存储类似,因此导入和导出证书的所有现有工具的工作方式相同。 Web 托管存储和个人存储之间的主要区别在于,Web 托管存储用于扩展到更高的证书数量。
  8. 将示例证书导入 Web 托管存储。

创建安全网站:

  1. 打开“IIS 管理器”。

  2. 在左侧导航窗口中选择“站点”:
    Screenshot that shows I I S Manager. Sites is selected.

  3. 右键单击“站点”,然后选择“添加网站”:
    Screenshot that shows the context menu for Sites.

  4. 填写信息,就像创建任何站点一样:

    • 站点名称:Test

    • 物理路径:c:\inetpub\wwwroot

    • 类型:https

    • 主机名:TAPTesting

      • 这是 Windows Server 8 的新增功能,可为 SSL 指定主机名。
      • 为了避免证书名称不匹配的错误,请确保此处指定的主机名与证书的 CN 名称匹配。
      • 此配置的实际值因正在使用的示例证书而异。
    • 使用服务器名称指示:已选中

    • SSL 证书:选择证书的名称,例如:TAPTesting。

      • 请注意,证书从个人和 Web 托管存储提供。

      Screenshot that shows the Add Website dialog box.

  5. 验证是否已创建站点:
    Screenshot that shows Test highlighted under the Sites node.

  6. 这就可以了。 已使用 SNI 创建安全站点。 此管理体验非常类似于传统的 SSL 绑定。 只存在下述区别:

    • 可以为 SSL 站点指定主机名。
    • 证书存储在 Web 托管存储中,以利于可伸缩性。

测试安全站点:

打开浏览器并导航到 https://TAPTesting/ 。 请注意,作为先决条件的一部分,你的主机文件应已修改,从而将此请求路由到 localhost:

Screenshot that shows Internet Explorer. I I S 8 is written in large text on the web page.

此外,若要查看新的 SSL 绑定类型,请在提升的命令行窗口中输入以下内容:

netsh http show sslcert

Screenshot that shows a command window. Host name and port are highlighted.

请注意,SSL 绑定是“主机名:端口”,值为“TAPTesting:443”。

方案

请尝试部署以下方案:

  • SNI 用于为多租户环境扩展。 尝试使用 SNI 配置数千个安全站点。
  • 与以前版本的 Windows Server 不同,Windows Server 2012 上的证书会按需加载到内存中。 使用 SNI 配置数千个安全站点后,向其中一个安全站点发送 GET 请求并观察内存使用情况。 它是可以忽略不计的。 在以前版本的 Windows Server 上,如果配置了数百个安全站点,则仅仅发送一个 GET 请求就会导致 Windows Server 加载所有证书,从而导致内存使用率高,并进一步限制可伸缩性。
  • 使用 SNI 和传统安全站点配置 Windows Server 2012。 它们在设计上是能够共存的。

总结

你已成功探索了 Windows Server 2012 中的服务器名称指示 (SNI) 功能。