请求已中止:无法在 c 中创建 SSL/TLS 安全通道#

The request was aborted: Could not create SSL/TLS secure channel in c#

提问人:Abhishek Avadhoot 提问时间:7/3/2023 最后编辑:Abhishek Avadhoot 更新时间:7/10/2023 访问量:954

问:

尝试在 Windows Server 2008 r2 中执行以下代码时,它会抛出错误,如“请求已中止:无法创建 SSL/TLS 安全通道”。我们已经启用了 TLS 1.1 和 1.2。请告诉我们如何解决它。此外,在尝试在 IE 中点击相同的 url 时,未启用 TLS 1.1、1.2 的错误。我们也可以使用 webview2 进行请求和响应。

string sURL = "https://connect.medlineplus.gov/service?mainSearchCriteria.v.cs=2.16.840.1.113883.6.88&mainSearchCriteria.v.c=897294&knowledgeResponseType=application/json";

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
WebRequest request = WebRequest.Create(sURL);
request.Credentials = CredentialCache.DefaultCredentials;

request.Method = "GET";

WebResponse response = request.GetResponse();

// Get the stream containing content returned by the server.
Stream dataStream = response.GetResponseStream();

// Open the stream using a StreamReader for easy access.
StreamReader reader = new StreamReader(dataStream);

// Read the content.
sReponseInJson = reader.ReadToEnd();
dataStream.Close();

HttpWebRequest、httpclient 和 WebRequest。


**

从 medlineplus.gov 问题得到解决。他们制作了密码 与安全相关的更改,现在可以在 Win 2008 上使用上述请求 R2 也是。

**

C# httpclient httpwebrequest tls1.2 webview2

评论

0赞 Charlieface 7/3/2023
ServicePointManager.SecurityProtocol =你为什么要这么做?为什么你还在使用2008R2,当它已经过时了,你是否至少应用了所有安全补丁,你是否在注册表中启用了TLS 1.2,如 support.microsoft.com/en-us/topic/ 所述......
0赞 Abhishek Avadhoot 7/3/2023
截至目前,我们无法升级操作系统。此外,我们也已经在注册表中启用了 TLS 1.2。
0赞 Charlieface 7/3/2023
您使用的是哪个版本的 .NET?请提供确切的内部版本号。
0赞 Abhishek Avadhoot 7/4/2023
我们正在使用 .Net 4.8 此外,我们还尝试了 4.5、4.6、4.6.1 等
0赞 Charlieface 7/4/2023
改用时会发生什么情况HttpClient

答:

0赞 Hirasawa Yui 7/3/2023 #1

正如你在这里看到的:

https://www.ssllabs.com/ssltest/analyze.html?d=connect.medlineplus.gov&s=75.2.125.67&hideResults=on

您尝试连接到的网站已禁用除 TLS 1.2 之外的所有安全协议。因此,您必须执行相同的操作:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

评论

0赞 Abhishek Avadhoot 7/3/2023
是的,仅尝试使用 SecurityProtocolType.Tls12 进行相同操作,但仍然存在问题。
1赞 Charlieface 7/5/2023
这不是答案。 不应该乱七八糟,操作系统会自动处理它。这里的问题是操作系统,需要针对 TLS 1.2 和 ECDH 进行配置。ServicePointManager.SecurityProtocol
0赞 Hirasawa Yui 7/5/2023
the operating system will deal with it automatically- 我希望你是对的,但可悲的是,没有。你有没有试过使用这些旧版本的Windows服务器?让 Tls1.2 在那里工作可能相当棘手。它将默认为除最新和最安全的 tls 之外的任何内容。
1赞 Charlieface 7/5/2023
@HirasawaYui 是的,我有,您需要做的就是安装最新的更新,在注册表中启用 TLS 1.2 和密码(或使用 IIS 加密),并使用最新版本的 .NET,然后一切正常。