【发布时间】:2016-02-08 16:40:59
【问题描述】:
我从某个支付提供商处生成了客户端证书,我必须在向他们的 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(Form)请求时发生错误底层 连接已关闭:发送时发生意外错误。 System.IO.IOException:无法从传输中读取数据 连接:已存在的连接被远程强行关闭 主持人。 ---> System.Net.Sockets.SocketException:现有连接 被远程主机强行关闭。
和
请求被中止:无法创建 SSL/TLS 安全通道。
如果您能告诉我发送带有证书链的请求的正确方法,我将不胜感激。
在 Microsoft 管理控制台中,我已将 p7b 添加到本地计算机的个人和中间证书颁发机构,但我仍然收到这两个错误。
【问题讨论】:
标签: ssl certificate ssl-certificate x509certificate2 tls1.2