无法创建SSL/TLS安全通道.SecureChannelFailure

Eit*_*tan 9 .net c#

使用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应用程序中工作.

Ter*_*men 0

您的 SSL 证书是由 Windows 中未安装的根证书签名的。

Firefox 附带了自己的受信任根证书列表,其中包含您正在使用的证书的根证书。仅仅因为 Firefox 信任证书并不意味着 Windows 也信任它。

解决方案是在运行应用程序的计算机上安装证书的根证书或证书链。

https://learn.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-create-temporary-certificates-for-use-during-development

如果这是一个拥有广泛受众的应用程序,更简单的解决方案是切换到已使用 Windows 附带的根证书的 SSL 提供商。