运行在Windows Server 2012R2上
我正在尝试在IIS上禁用TLS 1.0,因为客户端有一个站点扫描程序,该扫描程序将其突出显示为安全问题。
我设置了一个干净的测试服务器,应用程序运行良好,直到我禁用TLS 1.0。
我更新了所有适当的设置:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv2.0.50727]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv2.0.50727]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoft.NETFrameworkv4.0.30319]
"SchUseStrongCrypto"=dword:00000001
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.0]
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.0Client]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.0Server]
"Enabled"=dword:00000000
"DisabledByDefault"=dword:00000001
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.1]
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.1Client]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.1Server]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2]
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Client]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersSCHANNELProtocolsTLS 1.2Server]
"Enabled"=dword:ffffffff
"DisabledByDefault"=dword:00000000
在事件查看器中,我得到:
生成了致命警报并将其发送到远程终结点。这可能会 导致连接终止。定义的 TLS 协议 致命错误代码为 70。Windows SChannel 错误状态为 105。
如果我只恢复TLS 1.0的注册表设置(已启用,而不是默认情况下禁用(,一切又好了。
在 system.web 中使用:
<httpRuntime targetFramework="4.7.2" />
我错过了什么?
必须更新应用程序本身以支持 TLS 1.2 握手,因此,如果您只能访问配置,则不一定可以更改它。 如果底层代码不支持它,它将不起作用。
如果代码面向 .NET 4.6,我相信 TLS 1.2 将本机工作。 在 4.5 中,必须放置一行代码,以便在发生任何网络之前执行它。 代码:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
您的网站可能正在通过不支持 TLS 1.1+ 的 SSL 进行通信。您可以允许站点扫描程序看不到的传出 TLS 1.0 连接,但这些连接的安全性较低。
如果您使用的是 .net 4.7 或更高版本,请尝试此操作。
我为此使用了IIS Crypto。禁用 TLS 1.0 和 1.1,应用并重新启动。在此之后,您的所有应用程序、SharePoint 和网站都将使用 TLS 1.2
您还应该在 web.config 文件中指明目标版本
<system.web> <httpRuntime targetFramework = "4.7.2" /> <compilation targetFramework = "4.7.2"> </compilation> </system.web>
这将使它支持 TLS 1.2,并且始终强制使用此协议。
您是否尝试启用通道日志记录以获取更多信息?
https://support.microsoft.com/en-us/help/260729/how-to-enable-schannel-event-logging-in-iis
希望这将揭示缺失的部分。