ssl 找不到System.Net.安全性通信协定类型.Tls12定义

ztyzrc3y  于 2022-11-14  发布在  .NET
关注(0)|答案(6)|浏览(389)

我正在尝试将下面的代码行添加到网站项目的Global.asax文件中。

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

vs2012 IntelliSense显示Tls12定义存在。但构建版本显示该定义不存在(请参见屏幕截图)。

我已经尝试将System.Net.dll添加到项目的bin文件夹中,但是生成仍然失败。有什么办法可以解决这个问题吗?

7gcisfzg

7gcisfzg1#

仅在Framework 4.0上缺少安全协议类型.Tls11和安全协议类型.Tls12枚举值。
安全协议类型数值:
系统默认值(0)
Ssl 3(48 - 0x 30)的最小值
Tls(192 - 0xC 0)位寄存器
框架4.0上缺少Tls 11(768 - 0x 300)
框架4.0上缺少Tls 12(3072 - 0xC 00)
在Framework 4.0上,如果要允许TLS 1.0、1.1和1.2,只需替换:

SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12

签署人:

(SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
rseugnpd

rseugnpd2#

TLS和如何避免连接错误。

  • .NET 4.6及更高版本。您不需要做任何额外的工作来支持TLS 1.2,它是默认支持的。
  • .NET 4.5。支持TLS 1.2,但它不是默认协议。您需要选择使用它。以下代码将使TLS 1.2成为默认协议,请确保在连接到受保护的资源之前执行它:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
  • .NET 4.0。TLS 1.2不受支持,但如果您的系统上安装了.NET 4.5(或更高版本),那么即使您的应用程序框架不支持TLS 1.2,您仍然可以选择使用TLS 1.2。唯一的问题是.NET 4.0中的SecurityProtocolType没有用于TLS1.2的条目,因此我们必须使用此枚举值的数字表示:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
  • .NET 3.5或更低版本。不支持TLS 1.2(*),并且没有解决方法。请将您的应用程序升级到该框架的更新版本。

我个人在我的.Net 4.0 Framework上用过一些asp经典文件:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc0 | 0x300 | 0xc00);

https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/

busg9geu

busg9geu3#

您使用的是.net 4.0吗?您至少需要4.5才能使用它。您可以尝试更新您的web目标框架版本:TLS 1.2 in .NET Framework 4.0

xnifntxz

xnifntxz4#

网站已经在.Net 4.5,后来手动更新编译〉TargetFramework从4.0到4.5修复了我的问题。
这是更新后的配置

<compilation debug="true" targetFramework="4.5">
  <assemblies>
    <add assembly="System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    <add assembly="System.Net, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
  </assemblies>
</compilation>
sy5wg1nm

sy5wg1nm5#

关于您的应用程序(客户端)和您尝试连接的服务器将使用哪个版本的TLS。

直接引用自TLS的RFC 5246标准。

  • ClientHello期间(客户端向服务器发出的第一个请求)

客户端希望在此会话期间进行通信的TLS协议的版本。这应该是客户端支持的最新(最高值)版本。

  • ServerHello期间(服务器响应的第一个请求)

此字段将包含客户端在客户端hello中建议的最低值和服务器支持的最高值。
ClientHelloServerHello是具有在这里的标准中描述的字段的结构。

TL;DR

当使用System.Net.WebRequest时,您的应用程序将与服务器协商,以确定您的应用程序和服务器都支持的最高TLS版本,并使用它。

关于你的问题

  • 您可以找到.NET here支持的TLS协议版本,但请验证您正在使用的.NET Framework版本,并在msdn中导航到正确的版本。
nhjlsmyf

nhjlsmyf6#

对于vb.net服务点管理器。安全协议= DirectCast(&HC0或&H300或&HC00,安全协议类型)

相关问题