禁用 TLS 1.0 会中断 ASP.NET 应用程序



运行在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

希望这将揭示缺失的部分。

最新更新