繁体   English   中英

SSL / TLS不适用于.p7b证书

[英]SSL/TLS is not working with .p7b certificate

我从某个付款服务提供商生成了客户证书,并且必须在请求其https API时使用它。 我的代码如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://site/api/requests/");

request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataSerialized);
request.KeepAlive = false;

request.ProtocolVersion = HttpVersion.Version10;

ServicePointManager.Expect100Continue = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };

X509Certificate2Collection certCollection = new X509Certificate2Collection();
certCollection.Import(@"d:\Production Merchant Certificate.p7b");

request.ClientCertificates.AddRange(certCollection);
request.PreAuthenticate = true;


using (StreamWriter os = new StreamWriter(request.GetRequestStream())) //Exception
{
}

而且我总是会遇到两个错误:

发送POST(表单)请求时发生错误基础连接已关闭:发送中发生意外错误。 System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException:现有的连接被远程主机强行关闭。

该请求已中止:无法创建SSL / TLS安全通道。

如果您能告诉我发送带有证书链的请求的正确方法是什么,将不胜感激。

在Microsoft管理控制台中,我已将p7b添加到“本地计算机的个人和中级证书颁发机构”,但仍然出现这两个错误。

问题是您的客户端证书根本不包含私钥。 PKCS#7容器(带有.p7b文件扩展名)不应存储带有私钥的证书。 您需要获取有效引用私钥的证书对象。 可以将证书安装在您的个人证书存储区(CurrentUser \\ My)中,或通过导入PKCS#12(带有.pfx或.p12文件扩展名)的容器来安装,该容器应该存储带有私钥的证书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM