更新.NET Web服务以使用TLS 1.2


99

我需要使用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?


4
我相信必须在服务器上启用TLS12。support.quovadisglobal.com/kb/a433/…–
lcryder

4
为什么要下票?
nasch

Answers:


138

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

Artem所说的是我们已经完成的第一步。我们将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 +重新编译中添加的更改:

<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。


3
这是我们用于研究的文档:HTTPRuntimeRenderingCompatibility
Etienne Faucher

1
我知道了-我不是在请求HTTPS。我修复该问题后,它起作用了。
nasch

3
在我们的情况下,将编译更改为4.6并添加httpRuntime 4.6就足够了,谢谢您的解决方案!
krilovich

2
这是完全正确的答案。最近刚经历过。这是关于它的博客文章:blog.thelevelup.com/pci-security-is-your-restaurant-ready和执行此操作的GitHub项目:github.com/TheLevelUp/pos-tls-patcher
user24601,2018年


88

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

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

或为了向后兼容TLS 1.1及更低版本:

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

2
是的,我已经在做,但是错误消息仍然指示.NET 4.0。
nasch

12
那是您的CLR版本。.Net CLR具有两个版本:2.0和4.0。在IIS中,您指定CLR版本,而不是Framework版本。IIS不会告诉您.Net 4.6,因为它对此并不在乎。如果使用4.6进行编译,则说明使用的是4.6。
艾米(Amy)

2
.NET 4.5及更高版本支持TLS 1.2
Gilberto Alexandre

5
在这种情况下,| =优于=。它们是二进制标志,不要不必要地覆盖其他所有内容。
Izzy

2
@JohnWu-请注意上面Izzy的评论。您的代码告诉.NET在连接到HTTPS资源时仅明确使用TLS 1.2。也就是说,如果服务器仅具有TLS 1.1,则由于它仅使用TLS 1.2,因此您的代码将阻止其连接。当客户端和服务器协商使用哪种协议时,应使用| =告诉代码“也尝试使用TLS 1.2作为选项”。
唐·奇德尔

27

如果您使用的是.Net早于4.5的版本,则枚举中将没有Tls12,因此此处明确提到状态

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

17

需要三个步骤:

  1. 通过在注册表中添加Enabled=0DisabledByDefault=1,将SSL2.0,TLS1.0,TLS1.1明确标记为在服务器计算机上被禁止(完整路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)。见屏幕了解详情 注册表

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

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

  1. TLS1.2仅在应用程序级别启用,例如上面建议的@John Wu。

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

希望本指南对您有所帮助。

更新 @Subbu提到:官方指南



您好@Artem添加tls之后,我需要重新启动服务器吗?
辛巴

@Simba您可能已经解决了这个问题,但是刚才我不需要重启服务器。
Matt N.

5

下面对我来说工作:

步骤1:https://www.microsoft.com/zh-cn/download/details.aspx?id=48137下载并安装了Web Installer exe 在应用程序服务器上。安装完成后,重新启动了应用程序服务器。

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

<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(区分大小写)的ScriptResourceMapping “,为解决此错误,我在appsettings的下面添加了键在我的web.config文件中

<appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

添加httpRuntime目标框架对我有用。
Mark Redman

0

PowerBI Embedded需要TLS 1.2。

Etienne Faucher的上述答案是您的解决方案。快速答案上方答案...快速链接上方答案...https://stackoverflow.com/a/45442874

PowerBI需要TLS 1.2 2020年6月-这是您的答案-考虑将IIS运行时提高到4.6以强制您从框架中寻找默认的TLS 1.2行为。上面的答案为您提供了仅更改配置的解决方案。

病征:强制关闭到Microsoft PowerBI Embedded的TCP / IP连接,这突然显示出整个系统。

这些PowerBI调用只是停止处理TCP / IP硬关闭错误,就像防火墙会阻止连接一样。通常,身份验证步骤有效-在您单击特定工作区的服务并报告ID失败时。

这是Microsoft PowerBI于2020年发布的有关TLS 1.2的说明

PowerBIClient

显示此问题的方法

GetReportsInGroupAsync GetReportsInGroupAsAdminAsync GetReportsAsync GetReportsAsAdminAsync Microsoft.PowerBI.Api HttpClientHandler强制TLS 1.1 TLS 1.2

搜索错误术语以帮助人们发现此错误:System.Net.Http.HttpRequestException:发送请求时发生错误System.Net.WebException:基础连接已关闭:发送时发生意外错误。System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强行关闭。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.