如何在 IIS 7 或更高版本上设置 SSL

作者:Saad Ladki

介绍

为站点配置安全套接字层 (SSL) 的步骤在 IIS 7 及更高版本中与在 IIS 6.0 中是相同的,包括以下操作:

  • 获取相应证书。
  • 在站点上创建 HTTPS 绑定。
  • 通过向站点发出请求进行测试。
  • (可选)配置 SSL 选项,也就是说将 SSL 作为一项要求。

本文档提供了关于 SSL 的一些基本信息,然后介绍如何通过以下方式启用 SSL:

  • 使用 IIS 管理器。
  • 使用 AppCmd.exe 命令行工具。
  • 通过 Microsoft.Web.Administration 以编程方式使用。
  • 使用 WMI 脚本。

本文包含以下各节:

SSL 配置

无论是在自己的服务器上运行网站,还是在云中运行,使用 SSL来保护网站可能对你都非常重要,因为许多网站都使用它来保护用户的隐私。 如果需要在服务器上配置 SSL,请务必注意,SSL 的实现已从 IIS 6.0 更改到 IIS 7 及更高版本。 在 Windows Server 2003 上的 IIS 6.0 中,所有 SSL 配置都存储在 IIS 元数据库中,加密/解密在用户模式下进行(需要大量内核/用户模式转换)。 在 IIS 7 及更高版本中,HTTP.sys 在内核模式下处理 SSL 加密/解密,使 IIS 7 或更高版本中的安全连接性能比在 IIS 6.0 中提高多达 20%。

要在内核模式下使用 SSL,需要将 SSL 绑定信息存储在两个位置。 首先,该绑定存储在站点的 %windir%\System32\inetsrv\config\applicationHost.config 中。 站点启动时,IIS 会将绑定发送到 HTTP.sys,HTTP.sys 开始侦听指定 IP:Port 上的请求(这适用于所有绑定)。 其次,与绑定关联的 SSL 配置存储在 HTTP.sys 配置中。 在命令提示符处使用 netsh 命令查看存储在 HTTP.sys 中的 SSL 绑定配置,如以下示例所示:

netsh http show sslcert

当客户端连接并启动 SSL 协商时,HTTP.sys 在其 SSL 配置中查找客户端连接到的 IP:Port 对。 HTTP.sys SSL 配置必须包含证书哈希和证书存储的名称,然后 SSL 协商才能成功。

故障排除提示:如果在 SSL 绑定时遇到问题,请验证是否已在 ApplicationHost.config 中配置该绑定,并且 HTTP.sys 存储区是否包含有效的证书哈希和绑定存储名称。

选择证书

选择证书时,请考虑以下事项:是否希望最终用户能够使用你的证书验证你的服务器的标识? 如果是,则创建证书请求,并将该请求发送到已知证书颁发机构 (CA)(例如 VeriSign 或 GeoTrust),或者从 Intranet 域中的联机 CA 获取证书。 浏览器通常会在服务器证书中验证下面三项内容:

  1. 当前日期和时间处于证书上的“生效日期”和“失效日期”日期范围内。
  2. 证书的“公用名”(CN) 与请求中的主机标头相匹配。 例如,如果客户端向 https://www.contoso.com/ 发出请求,则 CN 必须为 www.contoso.com
  3. 证书的颁发机构是已知且受信任的 CA。

如果其中一项或多项检查失败,浏览器会发出警告来提示用户。 如果你有 Internet 站点或 Intranet 站点,而该站点的最终用户不是你自己认识的人员,那么你应始终确保这三个参数都有效。

自签名证书是在计算机上创建的证书。 对于不需要最终用户信任服务器的环境中(例如测试环境),这些证书非常有用。

使用 AppCmd

无法使用 AppCmd.exe 请求或创建证书。 也不能使用 AppCmd.exe 来创建 SSL 绑定。

配置 SSL 设置

可以使用 AppCmd.exe 将站点配置为仅接受服务器 HTTPS 连接,方法是修改“访问”部分中的 sslFlags 属性。 例如,可使用以下命令为 ApplicationHost.config 文件中的“默认网站”配置此设置(例如 commitPath:APPHOST):

%windir%\system32\inetsrv>AppCmd set config "Default Web Site" -commitPath:APPHOST -section:access -sslFlags:Ssl

如果成功,会显示以下消息:

Applied configuration changes to section "system.webServer/security/access" for "MACHINE/WEBROOT/APPHOST/Default Web Site" at configuration commit path "MACHINE/WEBROOT/APPHOST"

注意

若要要求 128 位 SSL,请将 sslFlags 值更改为 Ssl128。

以下示例演示如何查看默认网站的 access/ 部分设置。<> 已成功设置 sslFlags 属性。

%windir%\system32\inetsrv>AppCmd list config "Default Web Site" -section:access

执行命令会在 ApplicationHost.config 文件中生成以下条目:

<system.webServer>
  <security>
    <access flags="Script, Read" sslFlags="Ssl" />
  </security>
</system.webServer>

使用 WMI

无法使用 WebAdministration WMI 命名空间请求或创建证书。

创建 SSL 绑定

以下脚本演示如何创建新的 SSL 绑定,以及如何为 HTTP.sys 和 IIS 添加适当的配置:

Set oIIS = GetObject("winmgmts:root\WebAdministration")
'''''''''''''''''''''''''''''''''''''''''''''
' CREATE SSL BINDING
'''''''''''''''''''''''''''''''''''''''''''''

oIIS.Get("SSLBinding").Create _ 
   "*", 443, "4dc67e0ca1d9ac7dd4efb3daaeb15d708c9184f8", "MY"
'''''''''''''''''''''''''''''''''''''''''''''
' ADD SSL BINDING TO SITE
'''''''''''''''''''''''''''''''''''''''''''''

Set oBinding = oIIS.Get("BindingElement").SpawnInstance_
oBinding.BindingInformation = "*:443:"
oBinding.Protocol = "https"

Set oSite = oIIS.Get("Site.Name='Default Web Site'")
arrBindings = oSite.Bindings

ReDim Preserve arrBindings(UBound(arrBindings) + 1)
Set arrBindings(UBound(arrBindings)) = oBinding

oSite.Bindings = arrBindings
Set oPath = oSite.Put_

注意

证书哈希和存储必须引用服务器上真实、功能性的证书。 如果证书哈希和/或存储名称是虚假的,则会返回错误。

配置 SSL 设置

以下脚本演示如何使用 IIS WMI 提供程序设置 SSL 设置。 可以在 IIS_Schema.xml 文件中找到此值。

CONST SSL = 8  
Set oIIS = GetObject("winmgmts:root\WebAdministration")  
Set oSection = oIIS.Get(\_  
 "AccessSection.Path='MACHINE/WEBROOT/APPHOST',Location='Default Web Site'")  
oSection.SslFlags = oSection.SslFlags OR SSL  
oSection.Put\_ <a id="IISManager"></a>

IIS 经理

获取证书

在树视图中选择服务器节点,然后双击列表视图中的“服务器证书”功能:
Screenshot of the ALEXIS E 3 L H server node Home with Server Certificates selected.

在“操作”窗格中,单击“创建自签名证书...”。
Screenshot of the Server Certificates Actions pane with Create SelfSigned Certificate emphasized.

键入新证书的易记名称,然后单击“确定”。

现在你有了自签名证书。 证书标记为“服务器身份验证”使用;也就是说,它用作服务器端证书来进行 HTTP SSL 加密和验证服务器的标识。

创建 SSL 绑定

在树视图中选择一个站点,然后单击“操作”窗格中的“绑定...”。 这将显示绑定编辑器,可通过它为网站创建、编辑和删除绑定。 单击“添加...”,将新的 SSL 绑定添加到站点。

Screenshot of the Site Bindings dialog with one the default site binding.

新绑定的默认设置设为端口 80 上的 HTTP。 在“类型”下拉列表中选择“https”。 从“SSL 证书”下拉列表中选择在上一部分中创建的自签名证书,然后单击“确定”。

Screenshot of the Add Site Binding dialog with Type set to H T T P S and S S L certificate set to Test certificate.

现在,站点上有一个新的 SSL 绑定,然后只需验证它是否正常工作即可。
Screenshot of the Site Binding dialog with both the H T T P and H T T P S bindings.

验证 SSL 绑定

在“操作”窗格中的“浏览网站”下,单击与刚刚创建的绑定关联的链接。
Screenshot of the Browse Web Site section of the Actions pane with Browse asterisk colon 443 or H T T P S emphasized.

Internet Explorer (IE) 7 及更高版本将显示一个错误页,因为自签名证书是由计算机颁发的,而不是由受信任的证书颁发机构 (CA) 颁发的。 如果你将证书添加到受信任的根证书颁发机构列表中,该列表位于本地计算机的证书存储中或域的组策略中,那么 IE 7 及更高版本将信任该证书。 单击 “继续浏览此网站(不推荐)”
Screenshot of internet explorer displaying a security certificate error. Continue to this website (not recommended) is emphasized.

配置 SSL 设置

如果希望站点需要 SSL,或者以特定方式与客户端证书交互,请配置 SSL 设置。 单击树视图中的站点节点,返回到站点的主页。 双击中间窗格中的“SSL 设置”功能。

Screenshot of the S S L Settings pane requiring S S L and ignoring Client certificates.

总结

在本演练中,我们成功使用命令行工具 AppCmd.exe、脚本提供程序 WMI 和 IIS 管理器在 IIS 上设置了 SSL。