HTTP C# 客户端:无法创建 SSL/TLS 安全通道

elp*_*a01 4 c# ssl

我正在尝试使用仅适用于 HTTPS 的 HTTP API。

发送请求时出现以下错误“WebException:请求已中止:无法创建 SSL/TLS 安全通道。”

我的项目面向 .NET Framework 4.7.1

我可以使用 Firefox 连接到服务器,但我必须添加安全例外,我可以导出 .crt 并安装到我的 Windows 应用商店和 VS 项目。

ServicePointManager.ServerCertificateValidationCallback += 
    (message, cert, chain, errors) => true;
ServicePointManager.SecurityProtocol = 
    SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | 
    SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

handler = new HttpClientHandler();
client = new HttpClient(handler);

client.DefaultRequestHeaders.Add("Connection", "keep-alive");
client.DefaultRequestHeaders.Add("Cache-Control", "max-age=0");
client.DefaultRequestHeaders.Add("username", user);
client.DefaultRequestHeaders.Add("password", password);

handler.ClientCertificateOptions = ClientCertificateOption.Manual;

//handler.ClientCertificates.Add(new X509Certificate(@"./OnSSI.crt"));
handler.ServerCertificateCustomValidationCallback += 
    (message, cert, chain, errors) => true;
Run Code Online (Sandbox Code Playgroud)

编辑:来自 Firefox 的有关证书的更多信息:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 128bit keys, TLS1.2
PKCS #1 MD5 With RSA Encryption
Run Code Online (Sandbox Code Playgroud)

EDIT2:我认为主要问题是处理程序没有调用回调验证函数,我在 return true 参数处添加了一个断点,但它没有命中。

EDIT3:它似乎适用于.NET core 2.0,我仍在寻找.NET Framework 4.7中的解决方案

EDIT4:我使用代码创建了一个 .NET 标准库,当我使用 .NET Framework 应用程序启动时,我收到错误,而我没有使用 .NET core 应用程序

小智 5

它仅使用 Tls 值设置 SecurityProtocol 变量,如下所示:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
Run Code Online (Sandbox Code Playgroud)

基本上,.NETCORE 似乎通过选择本机 Tls 版本协议来隐式执行此操作。.NETFRAMEWORK 不太直观(可移植性要求较低)。