更新 .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 的 "in place" 更新。所以我想也许我已经完成了。但是,在我出于无关原因收到的错误页面上,它显示 Microsoft .NET Framework Version:4.0.30319 所以我似乎没有成功升级。有关如何确保我的应用程序池使用 .NET 4.6 或更一般地如何启用 TLS 1.2 的任何指示?

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

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

或者为了向后兼容 TLS 1.1 和之前的版本:

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

需要三个步骤:

  1. 通过将 Enabled=0DisabledByDefault=1 添加到您的注册表(完整路径是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols)。详情见屏幕

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

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

  1. 仅在应用程序级别启用TLS1.2,就像@John Wu 上面建议的那样。

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

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

更新 正如@Subbu 提到的:Official guide

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

A​​rtem 所说的是我们所做的第一步。我们将 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。

如果您使用的 .Net 早于 4.5,则枚举中不会包含 Tls12,因此会明确提及状态 here

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

下面对我有用:

第 1 步:https://www.microsoft.com/en-us/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 requires a ScriptResourceMapping for 'jquery'。请添加名为 jquery(区分大小写)" 的 ScriptResourceMapping 并解决此错误,我在 appsettings[=29= 中添加了下面的键] 在我的 web.config 文件中

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

PowerBI Embedded 需要 TLS 1.2。

上面 Etienne Faucher 的回答是您的解决方案。 快速 link 以上答案... ( )

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

症状:强制关闭被拒绝TCP/IP Microsoft PowerBI Embedded 连接突然出现在您的系统中。

这些 PowerBI 调用只是停止使用硬 TCP/IP 关闭错误,就像防火墙会阻止连接一样。通常授权步骤有效——当您点击特定工作区的服务并报告 id 时,它会失败。

This is the 2020 note from Microsoft PowerBI about TLS 1.2 required

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: 无法从传输连接读取数据:现有连接被远程主机强行关闭。

使用 .Net 4.6 或更高版本更新服务器将使用 TLS 1.2。

通过使用我们的一个控制台应用程序解决一些失败的电子邮件问题发现了这一点。

服务器只安装了 .Net 4.5,电子邮件发送失败。

在我的本地工作站上,我有 .Net 4.6,当 运行 控制台应用程序时,电子邮件没有失败。

因此我们将控制台应用程序移至具有 .Net 4.6 的服务器,没有进行任何其他更改,并且电子邮件再次正常工作。