【发布时间】:2018-12-19 16:01:54
【问题描述】:
使用 SSL 证书进行 SOAP 调用时出现 SSL 错误:
请求被中止:无法创建 SSL/TLS 安全通道。
奇怪的是,如果我在 Firefox 中加载证书并访问端点或调用 API 而不发送任何数据,我不会收到任何错误消息并且连接成功。公开 API 的公司也提到该证书是 kosher。
我正在加载的证书对“所有人”具有完全权限。我已经尝试了我在互联网上看到的所有解决方案,但仍然出现错误。
这是我创建请求的代码:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = (HttpWebRequest)WebRequest.Create(plugin.EndPoint);
request.ContentType = "text/xml; charset=utf-8";
request.Method = "POST";
获取证书的代码(我也尝试过使用 pfx):
var cert = new
509Certificate2(@"C:\clientcert.p12", "FakePassword");
request.ClientCertificates.Add(cert);
以及请求的代码:
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();
}
}
}
编辑:
这是运行请求的跟踪输出:
System.Net 信息:0:[11844] InitializeSecurityContext(缓冲区内计数=2,缓冲区外长度=0, 返回代码=CertUnknown)。 System.Net 错误:0:[11844] 中的异常 HttpWebRequest#63832831:: - 请求被中止:无法创建 SSL/TLS 安全通道.. System.Net 错误:0:[11844] 中的异常 HttpWebRequest#63832831::EndGetRequestStream - 请求是 中止:无法创建 SSL/TLS 安全通道..
我还更改了 SecurityProtocol:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
第二次编辑:我可以让它在 SoapUI 中工作,但不能在 .NET 应用程序中工作,只需从 SOAP UI 中的文件系统加载 SSL 证书。
【问题讨论】:
-
... 或在不发送任何数据的情况下调用 API,我没有收到任何错误消息 - 你确定你真的联系了服务器吗?案子? - 您可以尝试将所有值作为当前的 TLS 1.2 应用到 SecurityProtocol 或什么都不做。如果您对请求启用跟踪,您将获得详细的日志。
-
经过这么多研究,这个thread 为我工作!
-
System.NET 跟踪说“返回代码=CertUnknown”,所以它必须包含其他信息供您挖掘。类似stackoverflow.com/questions/9858275/… 这样的话题应该会给你一些提示。
-
这是一条“它不起作用”的异常消息。非常有意,他们不想给攻击者太多关于他做错了什么的信息。在另一台机器上启用日志记录,以便您确切地知道出了什么问题:support.microsoft.com/en-us/help/260729/… 如果日志内容没有帮助,那么您现在有很好的信息可以在 serverfault.com 上提问