使用SSL证书进行SOAP调用时出现SSL错误:
请求已中止:无法创建SSL/TLS安全通道.
奇怪的是,如果我在Firefox中加载证书并访问端点或调用API而不发送任何数据,我不会收到任何错误消息并且连接成功.暴露API的公司也提到证书是犹太人的.
我正在加载的证书具有"Everyone"的完全权限.我已经尝试过我在互联网上看到的所有解决方案,但仍然遇到错误.
这是我创建请求的代码:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(plugin.EndPoint);
request.ContentType = "text/xml; charset=utf-8";
request.Method = "POST";
Run Code Online (Sandbox Code Playgroud)
获取证书的代码(我也尝试过使用pfx):
var cert = new
509Certificate2(@"C:\clientcert.p12", "FakePassword");
request.ClientCertificates.Add(cert);
Run Code Online (Sandbox Code Playgroud)
和请求的代码:
byte[] byteArray = Encoding.UTF8.GetBytes(xml);
request.ContentLength = byteArray.Length;
using (var dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
using (WebResponse response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
StreamReader reader =
new StreamReader(responseStream ?? throw new InvalidOperationException());
return reader.ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
以下是运行请求的跟踪输出:
System.Net信息:0:[11844] InitializeSecurityContext(In-Buffers count = 2,Out-Buffer length = 0,返回代码= CertUnknown).System.Net错误:0:[11844] HttpWebRequest中的异常#63832831 :: - 请求已中止:无法创建SSL/TLS安全通道.. System.Net错误:0:[11844] HttpWebRequest中的异常#63832831 :: EndGetRequestStream - 请求已中止:无法创建SSL/TLS安全通道..
我还更改了SecurityProtocol:
ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)
第二次编辑:我可以通过在SOAP UI中从文件系统加载SSL证书,使其在SoapUI中工作,但不能在.NET应用程序中工作.
您的 SSL 证书是由 Windows 中未安装的根证书签名的。
Firefox 附带了自己的受信任根证书列表,其中包含您正在使用的证书的根证书。仅仅因为 Firefox 信任证书并不意味着 Windows 也信任它。
解决方案是在运行应用程序的计算机上安装证书的根证书或证书链。
如果这是一个拥有广泛受众的应用程序,更简单的解决方案是切换到已使用 Windows 附带的根证书的 SSL 提供商。
| 归档时间: |
|
| 查看次数: |
15295 次 |
| 最近记录: |