IIS7如何实现类似Apache拦截特定路径客户端证书并强制TLS重协商
IIS7 实现客户端SSL证书会话清除/强制重协商方案
一、IIS7 服务端配置
你可以直接通过目录下的web.config完成配置,和Apache的Directory规则效果完全一致:
- 在站点根目录创建
ssl_logout文件夹 - 在该文件夹内新建
web.config文件,写入以下内容:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <security> <!-- 要求SSL连接、强制提交客户端证书 --> <access sslFlags="Ssl, SslRequireCert" /> <!-- 直接拒绝所有访问请求,触发SSL会话失效 --> <authorization> <deny users="*" /> </authorization> </security> </system.webServer> </configuration>
- 确认IIS配置允许目录覆盖SSL规则:
- 打开IIS管理器,点击左侧根节点,双击「功能委派」
- 找到「SSL配置权限」项,设置为「允许」
- 或者直接编辑
C:\Windows\System32\inetsrv\config\applicationHost.config,将access节的overrideModeDefault改为Allow
配置完成后,访问/ssl_logout/路径时,IIS会强制触发TLS重协商,请求客户端证书后直接返回403,浏览器会自动清除对应站点的原有SSL会话缓存。
二、前端调用代码
无需修改原有逻辑,和Apache环境的JS代码完全兼容:
var xmlHttp = new XMLHttpRequest(); xmlHttp.onreadystatechange = function () { // 退出登录后的后续操作写在这里 }; xmlHttp.open( "GET", "/ssl_logout/", true ); xmlHttp.send();
三、其他方案说明
出于安全沙箱限制,浏览器没有向JavaScript开放操作SSL会话缓存的底层API,不存在纯JS实现的强制重载客户端证书/重建SSL连接的方案,所有实现都需要服务端配合触发TLS重协商完成。
内容的提问来源于stack exchange,提问作者Jan Catrysse
相关产品推荐
相关产品推荐

