如何拒绝低版本SSL请求?IIS10与ASP.NET MVC环境求助
解决ASP.NET MVC服务器无法拒绝SSL3客户端请求的问题
首先得纠正你一个核心误区:System.Net.ServicePointManager.SecurityProtocol是给客户端用的,不是服务器! 这个代码是用来控制你的ASP.NET应用自己作为客户端去调用外部API/服务时使用的加密协议,完全不影响服务器接收外部客户端请求时的协议协商——所以你设置它根本没用,这就是为啥你看不到变化的原因。
接下来咱们一步步解决问题,让服务器彻底拒绝仅支持SSL3的客户端请求:
1. 确认系统级Schannel配置(IISCrypto)已生效
你用IISCrypto禁用SSL3/TLS1.0的思路是对的,但这个设置是系统级的,必须重启服务器才能完全生效(只重启IIS不够,Schannel的配置需要系统重启加载):
- 打开IISCrypto,切换到「Protocols」标签,确认SSL 3.0、TLS 1.0的「Server」列是禁用状态,TLS 1.2是启用状态
- 点击「Apply」后,务必重启服务器
- 重启后可以通过注册表验证:
打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols- SSL 3.0 → Server子项:
Enabled值设为0,DisabledByDefault设为1 - TLS 1.0 → Server子项:同上
- TLS 1.2 → Server子项:
Enabled设为1,DisabledByDefault设为0
- SSL 3.0 → Server子项:
2. 在IIS站点层面强制仅允许TLS1.2
即使系统级配置生效,有时候IIS站点的SSL设置可能没同步,需要单独配置:
- 方法一:通过IIS管理器
找到你的ASP.NET MVC站点 → 右键「编辑绑定」→ 选中HTTPS绑定点击「编辑」→ 点击「SSL设置」→ 勾选「要求SSL」,然后通过站点的「配置编辑器」定位到system.webServer/security/access,把sslFlags设为Ssl,Ssl12(表示仅允许TLS1.2) - 方法二:通过web.config配置
在站点根目录的web.config里添加如下节点:
这个配置会让IIS直接拒绝使用SSL3/TLS1.0的客户端请求,连协商环节都会跳过。<system.webServer> <security> <access sslFlags="Ssl,Ssl12" /> </security> </system.webServer>
3. 排查是否存在中间层协议转换
你用Wireshark看到连接是TLS1.2建立的,这里有个可能:你的服务器前面有反向代理、负载均衡或者IIS ARR这类组件,客户端和代理协商SSL3,代理再和你的服务器用TLS1.2通信——这时候你抓的包是代理和服务器的连接,不是客户端和服务器的。
- 检查服务器是否有反向代理配置,如果有,需要在代理层也禁用SSL3,只允许TLS1.2,让代理直接拒绝客户端的SSL3请求。
4. 验证客户端的SSL3设置是否真的生效
有时候客户端的系统设置可能被组策略、第三方软件覆盖,导致实际并非仅启用SSL3:
- 在客户端运行IISCrypto,确认SSL3是唯一启用的协议,TLS1.1/1.2都被禁用
- 或者用PowerShell验证:
确认Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client'Enabled值为1,而TLS1.1/1.2的Client子项Enabled为0
按照这些步骤操作后,仅支持SSL3的客户端再发起请求时,服务器会直接拒绝连接,不会再协商出TLS1.2的连接了。
内容的提问来源于stack exchange,提问作者Mohsen Zahedi
相关产品推荐
相关产品推荐

