记录一次Https请求的报异常请求被中止: 未能创建 SSL/TLS 安全通道的问题

问题

使用了TLS1.2还是报异常 请求被中止: 未能创建 SSL/TLS 安全通道。(The request was aborted: Could not create SSL/TLS secure channel. )
问题描述如上,写在这里方便搜索引擎抓取,希望可以帮到同行,也作为一次踩坑的记录。

前言

项目中需要请求第三方接口进行数据交互,我方为接口服务调用方,接口提供方的站点仅开放了Https请求端口。在本地开发功能时一切正常,项目打包丢到服务器上就会报错
请求被中止: 未能创建 SSL/TLS 安全通道。 (The request was aborted: Could not create SSL/TLS secure channel.)

过程

C#请求https接口需要在发送请求前设置一下请求的协议,一般来说加上以下代码

//始终验证服务器证书
ServicePointManager.ServerCertificateValidationCallback =
(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => { return true;};
//设置协议
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 |
SecurityProtocolType.Tls12 |
SecurityProtocolType.Tls11 |
SecurityProtocolType.Tls;

如果 项目的.NetFramework版本过低 System.dll Version=2.0.0.0, SecurityProtocol 枚举类型只有Ssl3和Tls时,可以像下面这样写:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 |
SecurityProtocolType.Tls |
(SecurityProtocolType)192 |
(SecurityProtocolType)768 |
(SecurityProtocolType)3072

一般来说,写到这里问题就解决了。但是加了这个,程序在服务器上依然报错,请求被中止: 未能创建 SSL/TLS 安全通道。
首先想到的是服务器环境的问题,放个Postman到服务器上,请求目标站点API,请求通过,成功拿到数据... 删除Postman
这样来看就是IIS的问题了,应该是IIS作为客户端请求对方服务端请求失败了。 为了验证IIS到底支不支持请求HTTPS,我将接口的域名换成了 https://www.baidu.com/api/... ,捕获到的异常不再是 "请求被中止: 未能创建 SSL/TLS 安全通道。",变成了 错误代码404.这样看来就是目标站点的问题。使用 https://myssl.com/ 测试一下

发现目标服务器只支持TLS1.2且只支持一种TLS加密套件,并且模拟客户端握手很多低版本客户端都会握手失败,问题可能就是出现在这里

再到我方服务器下查找支持的TLS加密套件 ,WIN+R键 输入 gpedit.msc 进入组策略编辑器,计算机配置(Computer Configuration)->管理模板(Administrative Templates)->网络(Network)->SSL配置设置(SSL Configuration Settings)->SSL密码套件顺序(SSL Cipher Suite Order) 点击已启用(Enabled),把下方的SSL密码套件复制出来放到文本编辑器里(这里我用Win10的截图)

果然在这里没找到目标服务器支持的TLS1.2套件,仅支持一种套件这种情况肯定是对方服务器做了限制,沟通后让对方放开了部分TLS1.2套件,请求接口后终于不再报异常了。

结语

经过一系列的调试,最后发现是我方测试服务器因为系统版本太低的原因IIS不支持目标服务器的TSL的新型加密套件,导致https 请求第一次握手失败。
以下文章起到了很大的帮助,感谢!!
https://bbs.csdn.net/topics/392432872
https://blog.csdn.net/pijianzhirui/article/details/70198695

posted @   呱呱蛙呱呱呱  阅读(2539)  评论(3编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
鸡你太美~Baby~Baby~
点击右上角即可分享
微信分享提示