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

时间:2019-04-10 11:46:13

标签: c# client-certificates

使用客户端证书的身份验证从.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:身份验证失败,因为远程方已关闭传输流。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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