PayPal:与远程服务器的 SSL 握手期间出错
Posted
技术标签:
【中文标题】PayPal:与远程服务器的 SSL 握手期间出错【英文标题】:PayPal: Error during SSL Handshake with remote server 【发布时间】:2016-12-24 15:30:22 【问题描述】:问题最初讨论过: PayPal Sandbox 500 Proxy Error- PayPal Adaptive https://www.paypal-community.com/t5/About-Payments/Adaptive-payment-api-is-sending-Proxy-error/m-p/1091510
似乎问题被退回了,我得到了
<!DOChtml PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Proxy Error</title>
</head><body>
<h1>Proxy Error</h1>
The proxy server could not handle the request <em><a href="/AdaptiveAccounts/GetVerifiedStatus">POST /AdaptiveAccounts/GetVerifiedStatus</a></em>.<p>
Reason: <strong>Error during SSL Handshake with remote server</strong></p><p />
</body></html>
在我这边没有代码更改的任何请求。有人有这个问题吗?
更具体地说,我创建了一个 curl 请求来重现我的问题:
curl 'https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus' -X POST -H 'X-PAYPAL-REQUEST-DATA-FORMAT: NV' -H 'X-PAYPAL-RESPONSE-DATA-FORMAT: NV' -H 'X-PAYPAL-DEVICE-IPADDRESS: 10.10.44.75' -H 'X-PAYPAL-REQUEST-SOURCE: adaptiveaccounts-php-sdk-3.10.2' -H 'User-Agent: PayPalSDK/adaptiveaccounts-php-sdk 3.10.2 (lang=PHP;v=7.0.9;bit=64;os=Linux_2.6.32-042stab103.6;machine=x86_64;openssl=1.0.1e-fips;curl=7.19.7)' -H 'X-PAYPAL-APPLICATION-ID: APP-XXXXXXXXXXXX' -H 'X-PAYPAL-SECURITY-USERID: ikhaldeev-facilitator_api1.dev.football.com' -H 'X-PAYPAL-SECURITY-PASSWORD: XXXXXXXXXXXX' -H'X-PAYPAL-SECURITY-SIGNATURE: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -d 'accountIdentifier.emailAddress=paypalbiz%40example.com&matchCriteria=NAME&^CrstName=Test&lastName=Test' --tlsv1.2
对这个请求我热回复:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Proxy Error</title>
</head><body>
<h1>Proxy Error</h1>
The proxy server could not handle the request <em><a href="/AdaptiveAccounts/GetVerifiedStatus">POST /AdaptiveAccounts/GetVerifiedStatus</a></em>.<p>
Reason: <strong>Error during SSL Handshake with remote server</strong></p><p />
</body></html>
如您所见,我在 curl 命令中指定了 TLSv1.2,此外,如果我将从不支持 TLSv1.2 的服务器之一执行相同的命令(此服务器不适用于 paypal),我会收到另一个错误
curl 'https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus' -X POST -H 'X-PAYPAL-REQUEST-DATA-FORMAT: NV' -H 'X-PAYPAL-RESPONSE-DATA-FORMAT: NV' -H 'X-PAYPAL-DEVICE-IPADDRESS: 10.10.44.75' -H 'X-PAYPAL-REQUEST-SOURCE: adaptiveaccounts-php-sdk-3.10.2' -H 'User-Agent: PayPalSDK/adaptiveaccounts-php-sdk 3.10.2 (lang=PHP;v=7.0.9;bit=64;os=Linux_2.6.32-042stab103.6;machine=x86_64;openssl=1.0.1e-fips;curl=7.19.7)' -H 'X-PAYPAL-APPLICATION-ID: APP-XXXXXXXXXXXX' -H 'X-PAYPAL-SECURITY-USERID: ikhaldeev-facilitator_api1.dev.football.com' -H 'X-PAYPAL-SECURITY-PASSWORD: XXXXXXXXXXXX' -H'X-PAYPAL-SECURITY-SIGNATURE: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -d 'accountIdentifier.emailAddress=paypalbiz%40example.com&matchCriteria=NAME&^CrstName=Test&lastName=Test'
回复:
curl: (35) SSL connect error
如您所见,这是另一个错误。当然,我使用正确的凭据、appId 等。
【问题讨论】:
【参考方案1】:该错误意味着您的服务器没有通过 TLS 1.2 协议发送 HTTP 请求,而 PayPal 在沙盒中需要该协议,并且明年将在 Live 服务器上需要该协议。
更多details available here。最重要的是,
如果您想使用 TLS 1.2,您至少需要升级到 OpenSSL 1.0.1,然后您才能将 CURLOPT_SSLVERSION 设置为 6 (TLS 1.2)。
如果您希望在 SSL 请求期间自动使用 TLS 1.2,您还需要升级到 PHP 5.5.19+(这是理想的解决方案,但许多项目仍在使用旧的 PHP 版本)。
当然,这是假设您使用的是 PHP。如果没有,那么您只需要确保 TLS 1.2 与您正在使用的任何软件堆栈一起工作。
【讨论】:
我们确实支持 TLS 1.2。我添加了更多细节以表明这看起来不像我们这边的问题。 顺便说一句,我们使用的是 PHP 7.0.9 我不熟悉运行这样的命令行 curl 请求,所以我不确定 --tls1.2 标志是否可以工作,但是,我可以告诉你我自从 PayPal 在他们的沙箱上进行更改以来,已经多次看到 SSL 握手错误,并且在所有情况下都是因为没有使用 TLS 1.2。 Ofcoure TLS1.2 没有使用,我很确定你是对的。但我认为这是贝宝端的配置问题。例如,今天它刚刚开始工作,我们这边没有任何改变。我们没有做任何配置或代码更改,它只是开始工作。所以我 100% 确定这是贝宝的问题。以上是关于PayPal:与远程服务器的 SSL 握手期间出错的主要内容,如果未能解决你的问题,请参考以下文章
javax.net.ssl.SSLHandshakeException:在 jdk 6 中握手期间远程主机关闭连接
已成功与服务器建立连接,但是在登录前的握手期间发生错误。 (provider: SSL Provider, error: 0 - 等待的
javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接