带有客户端证书的 HttpWebRequest 总是收到错误“请求已中止:无法创建 SSL/TLS 安全通道。”

用户3510986

我正在使用 C# HttpWebRequest 向通过客户端证书进行身份验证的 Web 服务发送 XML 请求(该证书已由公共机构提供,并且有效且正确安装在服务器证书存储中)。

这是我的代码:

    public void CallWebService()
    {
        var _url = webServiceUrl;
        var _action = "soapActionToCall";
        X509Certificate2 Cert = null;

        try
        {
            //Search for the certificate in the store
            X509Store Store = new X509Store(StoreName.Root);
            Store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection Coll = Store.Certificates.Find(X509FindType.FindBySubjectName, "certifcateCommonName", false);
            if (Coll != null && Coll.Count > 0)
            {
                Cert = Coll[0];
            }
            else
                throw new Exception("Certificate non found!");

            //Method to create the soap XML envelope
            XmlDocument soapEnvelopeXml = CreateSoapEnvelope(typeOfService);
            HttpWebRequest webRequest = CreateWebRequest(_url, _action, soapEnvelopeXml.InnerText.Length);

            webRequest.ClientCertificates.Add(Cert);
            InsertSoapEnvelopeIntoWebRequest(soapEnvelopeXml, webRequest);

            // begin async call to web request.
            IAsyncResult asyncResult = webRequest.BeginGetResponse(null, null);

            // suspend this thread until call is complete. You might want to
            // do something usefull here like update your UI.
            asyncResult.AsyncWaitHandle.WaitOne();

            // get the response from the completed web request.
            string soapResult;
            using (WebResponse webResponse = webRequest.EndGetResponse(asyncResult))
            {
                using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
                {
                    soapResult = rd.ReadToEnd();
                }

                //Display the XML result
                txtResponse.Text = soapResult;
            }
        }
        catch (WebException webEx)
        {
            WebResponse errResp = webEx.Response;
            string text = "";
            XmlDocument xmlRsp = null;
            string error = "";

            if (errResp != null)
            {
                using (Stream respStream = errResp.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(respStream);
                    text = reader.ReadToEnd();
                }

                xmlRsp = new XmlDocument();
                xmlRsp.LoadXml(text);
                if (xmlRsp.GetElementsByTagName("soapenv:Fault").Count > 0)
                    error = xmlRsp.SelectSingleNode("//error").InnerText;

                if (error.Length > 0)
                    throw new Exception(error);
                else
                    throw webEx;
            }
            else
                throw webEx;

        }
    }

    private HttpWebRequest CreateWebRequest(string url, string action, int contentLength)
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
        webRequest.Headers.Add("SOAPAction", action);
        webRequest.Host = "host";
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.ContentLength = contentLength; 
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";
        ServicePointManager.Expect100Continue = true;
        // { Ssl3 = 48, Tls = 192, Tls11 = 768, Tls12 = 3072, } }.
        ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

        // allows for validation of SSL conversations
        ServicePointManager.ServerCertificateValidationCallback = delegate(
        Object obj, X509Certificate certificate, X509Chain chain,
        SslPolicyErrors errors)
        {
            return (true);
        };


        return webRequest;
    }

    private XmlDocument CreateSoapEnvelope()
    {
        XmlDocument soapEnvelop = new XmlDocument();
        soapEnvelop.Load("XmlFileToSend.xml");
        return soapEnvelop;
    }

    private void InsertSoapEnvelopeIntoWebRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
    {
        using (Stream stream = webRequest.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }
    }

我总是检索错误“请求已中止:无法创建 SSL/TLS 安全通道。” 当代码在 webRequest.GetRequestStream() 行输入方法 InsertSoapEnvelopeIntoWebRequest 时。有人有想法可以帮助我吗?

奇丹

我刚刚解决了一个非常类似的问题。就我而言,一旦我们将客户端证书附加到 WebRequestHandler,我们就会收到“请求已中止:无法创建 SSL/TLS 安全通道”。错误。

在这种情况下,解决方案是授予 IIS_IUSRS 用户组读取客户端证书私钥的权限。一旦完成,错误就消失了。

您可以在 mmc 中的证书管理单元中执行此操作。在适当的存储中找到客户端证书,右键单击它 -> 所有任务 -> 管理私钥 -> 添加执行您的进程的用户或用户组(如果您在 IIS 上运行,则 IIS_IUSRS 有效)并确保它具有“阅读”权限。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

HttpWebrequest失败,并显示yande.re(以及IE和curl)[“该请求已中止:无法创建SSL / TLS安全通道。”]

来自分类Dev

Chocolatey安装错误:请求已中止:无法创建SSL / TLS安全通道

来自分类Dev

服务器错误:请求已中止:无法创建SSL / TLS安全通道

来自分类Dev

Paypal沙箱错误:请求已中止:无法创建SSL / TLS安全通道

来自分类Dev

无法为 SSL/TLS C# Web 服务客户端建立安全通道

来自分类Dev

使用SpongyCastle从PKCS#10创建带有客户端证书的Https连接

来自分类Dev

使用SpongyCastle从PKCS#10创建带有客户端证书的Https连接

来自分类Dev

HttpClientHandler /请求被中止:无法创建SSL / TLS安全通道

来自分类Dev

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

来自分类Dev

无法使用签名证书建立SSL / TLS安全通道

来自分类Dev

Docusign Connect:错误-请求被中止:无法创建SSL / TLS安全通道

来自分类Dev

Java证书客户端SSL:无法找到请求的目标的有效证书路径

来自分类Dev

使用配置的servicepointmanager也会出现ASP.NET“请求已中止:无法创建SSL / TLS安全通道”

来自分类Dev

RestRequest在本地运行,但不是天蓝色的“请求已中止:无法创建SSL / TLS安全通道。”

来自分类Dev

django 通道如何知道客户端已断开连接?

来自分类Dev

动态请求客户端证书

来自分类Dev

Thinktecture IdentityServer中具有客户端证书的联合安全性的App.Config

来自分类Dev

具有自签名证书的 TLS 安全 TCP 服务器和客户端

来自分类Dev

Docusign Connect问题-请求被中止:无法创建SSL / TLS安全通道

来自分类Dev

CXF客户端:无法找到到请求目标的有效证书路径

来自分类Dev

WCF:无法为具有授权错误的SSL / TLS安全通道建立信任关系

来自分类Dev

带有Linux客户端的IIS FTP 8.5数据通道超时

来自分类Dev

RestSharp:无法创建SSL / TLS安全通道

来自分类Dev

如何等待直到带有HttpWebRequest的Web请求完成?

来自分类Dev

安全的WCF服务在客户端通道的第二次调用上超时

来自分类Dev

Java SSL客户端-服务器:无法找到有效的证书

来自分类Dev

无法为具有权限“本地主机”的SSL / TLS安全通道建立信任关系

来自分类Dev

从客户端发出instagram API请求是否安全?

Related 相关文章

  1. 1

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

  2. 2

    HttpWebrequest失败,并显示yande.re(以及IE和curl)[“该请求已中止:无法创建SSL / TLS安全通道。”]

  3. 3

    Chocolatey安装错误:请求已中止:无法创建SSL / TLS安全通道

  4. 4

    服务器错误:请求已中止:无法创建SSL / TLS安全通道

  5. 5

    Paypal沙箱错误:请求已中止:无法创建SSL / TLS安全通道

  6. 6

    无法为 SSL/TLS C# Web 服务客户端建立安全通道

  7. 7

    使用SpongyCastle从PKCS#10创建带有客户端证书的Https连接

  8. 8

    使用SpongyCastle从PKCS#10创建带有客户端证书的Https连接

  9. 9

    HttpClientHandler /请求被中止:无法创建SSL / TLS安全通道

  10. 10

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

  11. 11

    无法使用签名证书建立SSL / TLS安全通道

  12. 12

    Docusign Connect:错误-请求被中止:无法创建SSL / TLS安全通道

  13. 13

    Java证书客户端SSL:无法找到请求的目标的有效证书路径

  14. 14

    使用配置的servicepointmanager也会出现ASP.NET“请求已中止:无法创建SSL / TLS安全通道”

  15. 15

    RestRequest在本地运行,但不是天蓝色的“请求已中止:无法创建SSL / TLS安全通道。”

  16. 16

    django 通道如何知道客户端已断开连接?

  17. 17

    动态请求客户端证书

  18. 18

    Thinktecture IdentityServer中具有客户端证书的联合安全性的App.Config

  19. 19

    具有自签名证书的 TLS 安全 TCP 服务器和客户端

  20. 20

    Docusign Connect问题-请求被中止:无法创建SSL / TLS安全通道

  21. 21

    CXF客户端:无法找到到请求目标的有效证书路径

  22. 22

    WCF:无法为具有授权错误的SSL / TLS安全通道建立信任关系

  23. 23

    带有Linux客户端的IIS FTP 8.5数据通道超时

  24. 24

    RestSharp:无法创建SSL / TLS安全通道

  25. 25

    如何等待直到带有HttpWebRequest的Web请求完成?

  26. 26

    安全的WCF服务在客户端通道的第二次调用上超时

  27. 27

    Java SSL客户端-服务器:无法找到有效的证书

  28. 28

    无法为具有权限“本地主机”的SSL / TLS安全通道建立信任关系

  29. 29

    从客户端发出instagram API请求是否安全?

热门标签

归档