关于c#:更新.NET Web服务以使用TLS 1.2

Update .NET web service to use TLS 1.2

我需要使用TLS 1.2从我的.NET Web服务连接到另一个将强制使用TLS 1.2的服务。我发现一个资源说.net 4.6默认使用tls 1.2,所以听起来像是最简单的解决方案。我更新了服务器上的.NET框架并重新启动。在IIS中,我尝试使用.NET 4.6创建应用程序池,但只有4.0是唯一的选项。然后我发现一些东西说它仍然会说4.0,因为4.6是对.NET 4.0的"就地"更新。所以我想也许我完了。然而,在我得到的一个错误页面上,由于不相关的原因,它说Microsoft .NET Framework Version:4.0.30319,所以看起来我没有成功升级。关于如何确保我的应用程序池正在使用.NET 4.6,或者更一般地说,如何启用TLS 1.2,有什么建议吗?


我们实际上只是将.NET Web服务升级到4.6以允许TLS 1.2。

阿耳特姆所说的是我们迈出的第一步。我们将Web服务的框架重新编译为4.6,并尝试更改注册表项以启用TLS 1.2,尽管这不起作用:连接仍在TLS 1.0中。此外,我们不想在计算机上禁用SLL 3.0、TLS 1.0或TLS 1.1:其他Web服务可能正在使用此功能;我们在注册表上回滚了所做的更改。

我们实际上更改了web.config文件,告诉IIS:"嘿,请在4.6中运行我"。

以下是我们在.NET 4.6的web.config+重新编译中添加的更改:

1
2
3
4
5
6
7
8
9
<system.web>
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->

    <!--Added this httpRuntime -->
    <httpRuntime targetFramework="4.6" />

   
    <pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>

连接改为TLS 1.2,因为IIS现在在4.6中运行Web服务(明确告知),而4.6默认情况下使用的是TLS 1.2。


在实例化Web服务客户端之前添加以下代码:

1
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

或与TLS 1.1及之前版本的向后兼容:

1
System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;


如果您使用的.NET早于4.5,那么在枚举中就不会有TLS12,因此这里显式地提到了状态

1
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

需要三个步骤:

  • 通过将Enabled=0DisabledByDefault=1添加到注册表(完整路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols中),在服务器计算机上明确标记ssl2.0、tls1.0、tls1.1为禁止。有关详细信息,请参见屏幕registry

  • 按照1中的步骤显式启用TLS1.2。只需分别使用Enabled=1DisabledByDefault=0

  • 注:验证服务器版本:Windows Server 2003不支持TLS 1.2协议

  • 仅在应用程序级别启用TLS1.2,如上面建议的@john wu。

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

  • 希望本指南能有所帮助。

    更新正如@subbu提到的:官方指南


    对我来说,以下工作:

    步骤1:从https://www.microsoft.com/en-us/download/details.aspx下载并安装Web安装程序exe?应用服务器上的ID=48137。安装完成后重新启动应用程序服务器。

    步骤2:在web.config中添加以下更改

    1
    2
    3
    4
    5
    <system.web>
        <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 -->
        <!--Added this httpRuntime -->
        <httpRuntime targetFramework="4.6" />
    </system.web>

    步骤3:完成步骤1和2后,它给出了一个错误:"WebForms UnobtrusiveValidationMode需要'jQuery'的ScriptResourceMapping。"请添加名为jquery(区分大小写)的脚本资源映射,为了解决此错误,我在web.config文件的appsettings中添加了以下键

    1
    </appSettings>