TLS连接握手失败

时间:2014-11-07 13:14:14

标签: c# ssl paypal https

我们很难与从.Net应用程序禁用SSL3协议的远程计算机(如PayPal vb。)建立https连接。我们在HttpWebRequest实例的GetResponse方法上遇到以下异常。

  

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

当我们使用WireShark深度跟踪网络日志时,我们看到远程机器返回以下错误

  

TLSv1.2警报(等级:致命,描述:握手失败)   握手失败40

更有趣的情况是,当我尝试输入PayPal地址到互联网浏览器时,它可以成功打开页面,这意味着可以建立连接, 我们还尝试连接OpenSSL命令工具,结果再次成功连接。

当我们比较InternetExplorer和.Net应用程序的WireShark日志时,我们可以看到Internet Explorer正在发送比.Net应用程序更多的可用密码套件, 并且PayPal正在选择以下密码,该密码不在.Net应用程序请求中。

  

TLS_RSA_WITH_RC4_128_SHA

以下是从WireShark获取的日志:

ServerMachine:.Net application Client Hello .Net application Client Hello ServerMachine:.Net应用服务器响应 .Net application Server Response ServerMachine:InternetExplorer客户端您好 IE Client Hello ServerMachine:InternetExplorer服务器您好 IE Server Hello

从我们的开发机器中捕获了以下内容,这些机器正常运行。 DevMachine:.Net application Client Hello .Net application Client Hello on dev enviroment DevMachine:.Net application Server Hello .Net application Server Hello on dev enviroment

我们认为PayPal不喜欢我们发送的密码套件" Client Hello"来自.Net应用程序的请求。

更有趣的情况是这个问题只出现在我们的运行Windows 2008 R2的生产机器上,Everythins正在开发使用Windows Server 2008 R2和Windows 8的开发环境。

请给我们一些解决这个问题的想法。

以下是连接PayPal api的C#代码。

HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("https://api-3t.sandbox.paypal.com/2.0/");

wr.Method = "POST";
wr.ContentType = "application/x-www-form-urlencoded";


string output = null;
try
{
    WebResponse wres = wr.GetResponse();
    Stream ress = wres.GetResponseStream();
    StreamReader ressr = new StreamReader(ress, Encoding.UTF8);
    output = ressr.ReadToEnd();
}
catch (System.Net.WebException webEx)
{
    if (webEx.Response != null)
    {
        WebResponse wres = webEx.Response;
        Stream ress = wres.GetResponseStream();
        StreamReader ressr = new StreamReader(ress);
        output = ressr.ReadToEnd();
    }
    else
        throw webEx;

}
catch (Exception ex)
{
    throw ex;
}

最好的问候

1 个答案:

答案 0 :(得分:3)

  

我们认为PayPal不喜欢我们发送的密码套件" Client Hello"来自.Net应用程序的请求。

这是对的。如果查看ssllabs,您会看到,api-3t.sandbox.paypal.com仅支持RC4-SHA(TLS_RSA_WITH_RC4_128_SHA),它不包含在您的密码集中。

  

更有趣的情况是这个问题仅出现在运行Windows 2008 R2的生产机器上

可能是您已经为生产系统添加了一些强化并禁用了RC4-SHA,因为这种密码被认为是不安全的。有关您可能已实施的匹配建议,请参阅Microsoft Technet