客户端证书身份验证错误:“System.IO.IOException:身份验证失败,因为远程方已关闭传输流”

问题描述 投票:0回答:2

通过来自.Net应用程序的客户端证书使用身份验证发送https请求会导致“System.IO.IOException:身份验证失败,因为远程方已关闭传输流”错误。

具有相同客户端证书的相同请求适用于邮递员以及curl。

相同的.Net应用程序适用于其他环境。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var url = "https://yyyyyyyy:8081/xxxxxxxxx;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
X509Certificate2 cert = new X509Certificate2();
cert.Import("zzzzzz.pfx");
if (!cert.HasPrivateKey) throw new Exception("Certificate has no private key");
request.ClientCertificates.Add(cert);
if (request.ClientCertificates.Count != 1) throw new Exception("Certificate not loaded");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
// Bumm!!

未处理的异常:System.Net.WebException:基础连接已关闭:发送时发生意外错误。 ---> System.IO.IOException:身份验证失败,因为远程方已关闭传输流。

c# client-certificates
2个回答
0
投票

仅供参考,使用curl发出相同的查询工作没有任何问题:

curl --tlsv1.2 -v \
  --cacert ca_crt.pem \
  --cert cert.pem \
  --key key.pem \
  https://yyyyyyyy:8081/xxxxxxxxx

并使用以下密码套件:

* SSL connection using TLS_RSA_WITH_AES_256_CBC_SHA

0
投票

解决了!问题是缺少密码'TLS_RSA_WITH_AES_256_CBC_SHA256'(由于安全规则.....)

© www.soinside.com 2019 - 2024. All rights reserved.