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

5
我正在使用NopCommerce的PayPalStandard插件。当我通过PayPalStandard插件下订单并进行支付,在成功完成支付后,它会重定向到商家网站。此时,它会出现以下错误:

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

我还在使用Paypal的沙盒账户进行测试。

它会从这一行代码抛出错误:

var sw = new StreamWriter(req.GetRequestStream()

以下是代码:

var req = (HttpWebRequest)WebRequest.Create(GetPaypalUrl());
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        req.ProtocolVersion = HttpVersion.Version10;

        string formContent = string.Format("cmd=_notify-synch&at={0}&tx={1}", _paypalStandardPaymentSettings.PdtToken, tx);
        req.ContentLength = formContent.Length;

        using (var sw = new StreamWriter(req.GetRequestStream(), Encoding.ASCII))
            sw.Write(formContent);

我大约一天前开始看到这种情况。也许是https://www.sandbox.paypal.com/的证书出了问题? - bustrofedon
9-10个月前,沙盒没有出现任何错误。这是沙盒的问题吗? - chitra
此代码也可以成功地与PayPal账户配合使用。这只发生在沙盒账户中。所以这是沙盒账户的问题? - chitra
2个回答

17

我遇到了连接沙盒(nvp)的同样问题,一切正常,但昨天出现了“请求被中止:无法创建SSL/TLS安全通道”的消息。

我相信PayPal在2016年1月19日/20日更新了其终端点以使用TSL 1.2和HTTP 1.1。

为了解决这个问题,在调用WebRequest.Create()之前,对于.NET 4.5及以上版本,请添加以下代码行。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

非常感谢@nqynik。这解决了我的问题。 - chitra
1
这个答案对我也有帮助。你应该在你的答案中补充一件事:SecurityProtocolType.Tls12 只适用于 .NET 4.5 或以上版本,所以如果目标框架是 .NET 4.0,那么你需要更改目标框架。 - ekad
你是救星。希望微软更新其PayPal教程!!1 - Jose A
如果您正在使用 .Net 4.0,则不会获得 SecurityProtocolType.Tls12 选项,此时您可以使用以下代码:ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; // SecurityProtocolType.Tls12如此链接所示- https://dev59.com/HlsW5IYBdhLWcg3wdnJh - ramya

0
我们找到的解决方案在 PayPal 的博客文章 Upcoming Security Changes Notice 中列出。文章中列出了许多事项,但我们所做的并且有效的是 PayPal SDK 更新。我们使用 NuGet 进行了更新,然后一切都重新开始正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接