ASP.NET 解决 请求被中止: 未能创建 SSL/TLS 安全通道。(.NET 4.0)

场景

IIS 访问 https 域名接口(Nginx)

客户端是IIS 服务端是Nginx

客户端请求 服务端进行ssl 通道失败

代码

1
2
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls

发现报错

1
Could not create SSL/TLS secure channel.

原因分析

客端户端:
1、报错的信息是很明显了,未能创建 SSL/TLS 安全通道。
2、代码上做了兼容TLS1.2 TLS1.1 TLS1.0 只要服务端支持其中一个协议就行。

服务端
检查是否支持 TLS1.2 TLS1.1 TLS1.0

检查网站1
检查网站2

检查发现是支持协议 TLS1.2 但是不支持 TLS1.1 TLS1.0

支持的加密套件

原因
1、1.2 虽然支持 但可能加密算法不支持。
2、1.1 和1.0 不支持

解决方案

一、支持协议 TLS1.1 TLS1.0

既然大致原因找到,先让Nginx 支持协议 TLS1.1 TLS1.0

Nginx 官方网站,有根据Nginx版本和openssl 版本自动生成的配置文件的网站。

https://ssl-config.mozilla.org/

我们把对应的配置,配置到线上Nginx上在做一次检查。

1
2
3
# TLS版本
ssl-protocols: "TLSv1.3 TLSv1.2 TLSv1.1 TLSv1"
ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA"

支持协议

支持的加密套件

业务测试,是正常了。

二、调整支持的加密套件

这个协议与套件,是客户端和服务端商量好来的。具有对应关系。

我们一开始Nginx 就是支持TLS1.2 但是业务上还是不行。
说明支持并不是TLS1.1 TLS1.0的问题
有可能出在加密套件没有匹配上。

调整 支持的加密套件 关闭 TLS1.1 TLS1.0

业务测试OK 没问题。

三、关闭有风险的加密套件

有点洁癖,加密套件黄色部分,表示加密套件是弱加密不安全

于是 去除黄色部分的加密配置

1
2
3
# TLS版本
ssl-protocols: "TLSv1.3 TLSv1.2"
ssl-ciphers: "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256"

最终效果

业务测试也OK。