在 IIS 6 和更高版本上启用 SSLAlwaysNegoClientCert运行 IIS 6 和更高版本的 Web 服务器会受到影响,因为它们通过请求客户端证书来要求执行相互身份验证,可以通过启用 SSLAlwaysNegoClientCert 设置进行加固。 这将导致 IIS 在初始连接时提示客户端提供证书,不需要由服务器发起的重新协商。
变通办法的影响: 设置此标志将要求客户端先执行身份验证,才能从受 SSL 保护的网站加载任何元素。 这将导致浏览器在连接到受 SSL 保护的网站时始终提示用户提供客户端证书。 如果受 SSL 保护的内容不需要相互身份验证,则收到提示选择证书的用户只需要取消该对话框以查看 SSL 连接上的内容,而不必选择要用来执行身份验证的证书。
对于 IIS 6:
在提升的/管理员命令提示符处从“c:\inetpub\adminscripts”文件夹中运行下列命令:
adsutil.vbs SET w3svc//SSLAlwaysNegoClientCert true
其中 代表要配置的网站编号(例如,“默认网站”为 1,下一网站为 2 等等)。 例如:要保护 IIS 创建的“默认网站”,应使用下列命令:
adsutil.vbs SET w3svc/1/SSLAlwaysNegoClientCert true
对于 IIS 7:
将下列文本保存到 Enable_SSL_Renegotiate_Workaround.js 文件中
var vdirObj=GetObject("IIS://localhost/W3svc/1");
// replace 1 on this line with the number of the web site you wish to configure
WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert);
vdirObj.Put("SSLAlwaysNegoClientCert", true);
vdirObj.SetInfo();
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert);
从提升的/管理员命令提示符处运行下列命令:
cscript.exe enable_ssl_renegotiate_workaround.js