2017-07-28 299 views
13

我需要使用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服务以使用TLS 1.2

+2

我相信TLS12必须在服务器上启用。 https://support.quovadisglobal.com/kb/a433/how-to-enable-tls-1_2-on-windows-server-2008-r2.aspx – lcryder

+0

为什么downvotes? – nasch

回答

16

我们实际上刚刚将.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”。

下面是我们在web.config +反编译,添加在.NET 4.6的变化:

<system.web> 
    <compilation targetFramework="4.6"/> <!-- Changed framework 4.0 to 4.6 --> 

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

    <authentication mode="Windows"/> 
    <pages controlRenderingCompatibilityVersion="4.0"/> 
</system.web> 

而改为TLS 1.2的连接,因为IIS现在运行在4.6 Web服务(明确地说) 4.6默认使用TLS 1.2。

+0

下面是我们用于研究的文档:[HTTPRuntime](https:// blogs .msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework /),[RenderingCompatibility](https://msdn.microsoft.com/en-us/library/system.web.ui .control.renderingcompatibility(v = vs.110).aspx) –

+0

我对web.config进行了这些更改,重建,部署,并且我得到了'System.Net.WebException:请求失败,返回一个空响应。我不知道它是从我的结尾还是另一边的问题。任何想法如何验证我正在使用TLS 1.2? – nasch

+0

您可以使用网络协议分析器,如[Wireshark](https://www.wireshark.org/)来验证您的连接状态。 –

6

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

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

是的,我已经这样做了,但错误消息仍然表明.NET 4.0。 – nasch

+6

这是您的CLR版本。 .Net CLR有两个版本,2.0和4.0。在IIS中,您指定CLR版本,而不是Framework版本。 IIS不会告诉你.Net 4.6,因为它不关心这一点。如果你使用4.6编译,那么你使用的是4.6。 – Amy

4

三个步骤需要:

  1. 明确标注SSL2.0,TLS1.0,TLS1.1为禁止上您的服务器机器,将Enabled=0DisabledByDefault=1添加到您的注册表中(完整路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)。见屏幕细节 registry

  2. 按照从1中的步骤只是分别使用Enabled=1DisabledByDefault=0明确启用TLS1.2

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

  • 仅在应用程序级别启用TLS1.2,像@约翰吴上面所建议的。

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

  • 希望本指南帮助。

    +1

    官方参考 - https://technet.microsoft.com/en-us/library/dn786418(v=ws.11).aspx#BKMK_SchannelTR_TLS12 – Subbu