如何在 IIS 7 或更高版本上设置 SSL
本文内容
介绍
SSL 配置
使用 AppCmd
使用 WMI
IIS 经理
总结
显示另外 2 个
作者:Saad Ladki
为站点配置安全套接字层 (SSL) 的步骤在 IIS 7 及更高版本中与在 IIS 6.0 中是相同的,包括以下操作:
获取相应证书。
在站点上创建 HTTPS 绑定。
通过向站点发出请求进行测试。
(可选)配置 SSL 选项,也就是说将 SSL 作为一项要求。
本文档提供了关于 SSL 的一些基本信息,然后介绍如何通过以下方式启用 SSL:
使用 IIS 管理器。
使用 AppCmd.exe 命令行工具。
通过 Microsoft.Web.Administration 以编程方式使用。
使用 WMI 脚本。
本文包含以下各节:
无论是在自己的服务器上运行网站,还是在云中 运行,使用 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 获取证书。 浏览器通常会在服务器证书中验证下面三项内容:
当前日期和时间处于证书上的“生效日期”和“失效日期”日期范围内。
证书的“公用名”(CN) 与请求中的主机标头相匹配。 例如,如果客户端向 https://www.contoso.com/
发出请求,则 CN 必须为 www.contoso.com
。
证书的颁发机构是已知且受信任的 CA。
如果其中一项或多项检查失败,浏览器会发出警告来提示用户。 如果你有 Internet 站点或 Intranet 站点,而该站点的最终用户不是你自己认识的人员,那么你应始终确保这三个参数都有效。
自签名证书是在计算机上创建的证书。 对于不需要最终用户信任服务器的环境中(例如测试环境),这些证书非常有用。
无法使用 AppCmd.exe 请求或创建证书。 也不能使用 AppCmd.exe 来创建 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 >
无法使用 WebAdministration WMI 命名空间请求或创建证书。
以下脚本演示如何创建新的 SSL 绑定,以及如何为 HTTP.sys 和 IIS 添加适当的配置:
Set oIIS = GetObject("winmgmts:root\WebAdministration")
oIIS.Get ("SSLBinding" ).Create _
"*" , 443 , "4dc67e0ca1d9ac7dd4efb3daaeb15d708c9184f8" , "MY"
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_
备注
证书哈希和存储必须引用服务器上真实、功能性的证书。 如果证书哈希和/或存储名称是虚假的,则会返回错误。
以下脚本演示如何使用 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>
在树视图中选择服务器节点,然后双击列表视图中的“服务器证书”功能:
在“操作”窗格中,单击“创建自签名证书...”。
键入新证书的易记名称,然后单击“确定”。
现在你有了自签名证书。 证书标记为“服务器身份验证”使用;也就是说,它用作服务器端证书来进行 HTTP SSL 加密和验证服务器的标识。
在树视图中选择一个站点,然后单击“操作”窗格中的“绑定...”。 这将显示绑定编辑器,可通过它为网站创建、编辑和删除绑定。 单击“添加...”,将新的 SSL 绑定添加到站点。
新绑定的默认设置设为端口 80 上的 HTTP。 在“类型”下拉列表中选择“https”。 从“SSL 证书”下拉列表中选择在上一部分中创建的自签名证书,然后单击“确定”。
现在,站点上有一个新的 SSL 绑定,然后只需验证它是否正常工作即可。
在“操作”窗格中的“浏览网站”下,单击与刚刚创建的绑定关联的链接。
Internet Explorer (IE) 7 及更高版本将显示一个错误页,因为自签名证书是由计算机颁发的,而不是由受信任的证书颁发机构 (CA) 颁发的。 如果你将证书添加到受信任的根证书颁发机构列表中,该列表位于本地计算机的证书存储中或域的组策略中,那么 IE 7 及更高版本将信任该证书。
单击 “继续浏览此网站(不推荐)” 。
如果希望站点需要 SSL,或者以特定方式与客户端证书交互,请配置 SSL 设置。 单击树视图中的站点节点,返回到站点的主页。 双击中间窗格中的“SSL 设置”功能。
在本演练中,我们成功使用命令行工具 AppCmd.exe、脚本提供程序 WMI 和 IIS 管理器在 IIS 上设置了 SSL。