我需要使用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?
答案 0 :(得分:81)
我们实际上只是将.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。
答案 1 :(得分:44)
在实例化Web服务客户端之前添加以下代码:
batch_size
或者为了与TLS 1.1及之前的向后兼容:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
答案 2 :(得分:14)
如果您在4.5之前使用.Net,则枚举中不会有Tls12,因此明确提到状态here
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
答案 3 :(得分:12)
需要三个步骤:
通过在注册表中添加Enabled=0
和DisabledByDefault=1
,明确将SSL2.0,TLS1.0,TLS1.1标记为服务器计算机上的禁止(完整路径为{{1 }})。有关详情,请参见屏幕
按照以下步骤显式启用HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
。分别使用TLS1.2
和Enabled=1
。
注意:验证服务器版本:DisabledByDefault=0
不支持Windows Server 2003
协议
仅在应用级别启用TLS 1.2
,例如上面提到的@John Wu建议。
TLS1.2
希望本指南有所帮助。
<强>更新强> 正如@Subbu所说:Official guide
答案 4 :(得分:3)
对于我下面的工作:
步骤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步后,它出错,&#34; WebForms UnobtrusiveValidationMode需要一个ScriptResourceMapping用于&#39; jquery&#39;。请添加一个名为jquery的ScriptResourceMapping(区分大小写) &#34;为解决此错误,我在 web.config 文件
中的 appsettings 中添加了以下键:<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
答案 5 :(得分:0)
PowerBI Embedded需要TLS 1.2。
上述 Etienne Faucher 的答案就是您的解决方案。 快速链接到以上答案... quick link to above answer... (https://stackoverflow.com/a/45442874)
PowerBI需要TLS 1.2 2020年6月-This Is your Answer-考虑强制IIS运行时达到4.6,以强制您从框架中寻找默认的TLS 1.2行为。上面的答案为您提供了仅更改配置的解决方案。
症状:强制关闭到Microsoft PowerBI Embedded的TCP / IP连接,这突然出现在整个系统中。
这些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:无法从传输连接读取数据:现有连接被远程主机强行关闭。