SSL失败 - 将HttpWebRequest与客户端证书一起使用时收到SSL / TLS异常

时间:2012-02-11 18:14:54

标签: .net security ssl certificate

我有一台带有IIS 7的Windows 2008 Server,它使用.NET C#应用程序向PayPal发送请求以处理付款。几个月前,我安装了Verisign购买的证书。安装后,我能够运行我的WebClient代码以成功创建SSL连接,并通过PayPal NVP API(名称值对)处理付款。

最近,我在SSL交易期间收到错误。具体错误如下:

无法创建SSL / TLS安全通道

我已经检查了我能想到的一切,并在网上阅读了很多关于StackOverflow和其他地方的文章。

我找到的最好的资源是:

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

查看本文中的错误http://support.microsoft.com/kb/915599解决方案J.也可能是您没有提供客户端证书。很可能这是使用TLS或SSL3的问题,服务器不理解它。

http://blogs.msdn.com/b/jpsanders/archive/2009/01/07/you-receive-one-or-more-error-messages-when-you-try-to-make-an-http-request-in-an-application-that-is-built-on-the-net-framework-2-0.aspx

以下列出了我尝试阅读并诠释其解决方案的所有其他资源:

我试过的各种链接:

http://support.microsoft.com/kb/901183

Could not create SSL/TLS secure channel - Could the problem be a proxy server?

The request was aborted: Could not create SSL/TLS secure channel

The request was aborted: Could not create SSL/TLS secure channel - Decrypt returned SEC_I_RENEGOTIATE

http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/99d49286-5c3a-4311-a1e3-499f035ce979/

http://blogs.msdn.com/b/jpsanders/archive/2009/01/07/you-receive-one-or-more-error-messages-when-you-try-to-make-an-http-request-in-an-application-that-is-built-on-the-net-framework-2-0.aspx

http://forums.iis.net/t/1156690.aspx

我尝试了以下解决方案:

  1. 重新安装证书,并将其放入各个商店(个人,本地计算机)
  2. 添加了此ServiceManager代码:

    ServicePointManager.Expect100Continue = true;
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
    
  3. 启用日志记录以获取更详细的详细信息

  4. 上述链接中列出的各种其他解决方案
  5. 令人沮丧的是,这几个月前工作正常,现在我收到了这个错误。起初,我认为证书已过期,但看起来没问题。

    它可能是Windows Server的Service Pack或Hotfix创建了一个破坏SSL的新设置或方案。我认为重新安装证书可以解决这个问题。

    重要的是要注意,当我重新安装时,我只是将其添加到各个商店(双击证书并安装)。我没有创建“证书申请”。由于它已经安装并绑定到我的IIS应用程序的SSL端口,它应该没问题。

    这是创建网络请求的代码:

         public static Hashtable DoWebReq(string strNVP, string strNVPSandboxServer)
        {
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
    
            string _strNVP = strNVP; 
    
            //Create web request and web response objects, make sure you using the correct server (sandbox/live)
            var wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVPSandboxServer);
            wrWebRequest.Method = "POST"; // POST
    
            var requestWriter = new StreamWriter(wrWebRequest.GetRequestStream());
    
    
            requestWriter.Write(_strNVP);
            requestWriter.Close();
    
            // Get the response.
            var hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse();
            var responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream());
    
            //and read the response
            string responseData = responseReader.ReadToEnd();
            responseReader.Close();
    
            string result = System.Web.HttpContext.Current.Server.UrlDecode(responseData);
    
            string[] arrResult = result.Split('&');
            Hashtable htResponse = new Hashtable();
            string[] responseItemArray;
            foreach (string responseItem in arrResult)
            {
                responseItemArray = responseItem.Split('=');
                htResponse.Add(responseItemArray[0], responseItemArray[1]);
            }
    
            return htResponse; 
        }
    

    以下是一系列屏幕截图,用于显示SSL计算机的各个组件:

    这是IIS中的SSL绑定设置: SSL Bindings

    以下是已安装的Certs的概述: certs1

    这是我收到的错误: SSL Error

    certs2

    Certs已安装: enter image description here

    证书详情 enter image description here

    任何有关修复此错误的建议都将非常受欢迎。我考虑但未解决的一些可能性是:

    1. 请求可能需要太长时间吗?它似乎足够快......但我读过这可能是一个问题。
    2. 在Internet Explorer中,我确实看到绿色“SSL条”,它显示此网站已被验证为安全。这告诉我Cert安装正确,这是真的吗?
    3. 我是否可以通过某种HTTP请求执行简单的测试来帮助缩小问题的根源?
    4. 这可能与PayPal有关吗? Paypal是否有可能因为他们的凭证而拒绝请求?
    5. 在调试问题时,实施ICertificatePolicy Interface会有任何帮助吗?我希望我能解决它。
    6. 我认为无论SSL是否有效,它对PayPal都没有任何影响/依赖......但我可能错了。

      我觉得我应该只能使用由WebClient类构建的名称值对URL,并通过IE在管道上发送并接收响应。

2 个答案:

答案 0 :(得分:2)

我认为问题可能不在您的客户证书中,而是在PayPal中。

关于你的问题:

  

在Internet Explorer中,我确实看到绿色“SSL条”,它显示此网站已被验证为安全。这告诉我Cert安装正确,这是真的吗?

不,这意味着您的浏览器会验证PayPal的服务器证书,即PayPal的证书由作为您的证书颁发机构添加的人签名。但是,PayPal的证书不会添加到您的可信证书中。

我还注意到,PayPal的当前证书的有效期为23.3.2011。也许在那之前你的应用程序正在运行,现在它已被更改,应用程序已停止工作。

基于此,我建议尝试将PayPal自己的证书安装为服务器证书。

答案 1 :(得分:0)

这个其他的答案可能有所帮助:

Issue with Paypal Payments Pro

总之,你应该在实时PP服务器上试一试,看它是否有效:)