【发布时间】:2016-02-18 06:17:05
【问题描述】:
Paypal 沙盒已更新为使用 TLS 1.2 (https://devblog.paypal.com/upcoming-security-changes-notice/#tls)。在我没有任何更改的情况下,我看到了“handshake_failure”错误。
我已按照https://github.com/paypal/TLS-update#paypal-java-sdk-support 中的建议更新了我们使用的 JAVA 库。我使用的是旧的 1.x 版本。
但是,PayPal 会抛出 PayPalException。
[com.paypal.sdk.exceptions.TransactionException] (http-localhost/127.0.0.1:8082-7) (400)Bad Request:
除了更新 paypal_base.jar (soap),我还使用 VM 选项“-Dhttps.protocols=TLSv1.1,TLSv1.2”,但没有任何区别。
我使用的贝宝端点是
https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&useraction=commit&token=
我已尝试使用https://developer.paypal.com/docs/classic/api/endpoints/ 中提供的端点 API 签名 -> SOAP -> 沙箱,但没有成功。
对还需要做什么有什么建议吗?
更新
我运行了他们提供的测试应用程序(TlsCheck.java / jar),结果如下
java "-Dhttps.protocols=TLSv1.1,TLSv1.2" -jar TlsCheck.jar
this client supports TLS 1.2
Failed to connect to TLS 1.2 endpoint
在浏览器中访问端点 tlstest.paypal.com 会返回“400 错误请求”。将端点更改为https://tlstest.paypal.com 会按预期返回“PayPal_Connection_OK”。
我还制作了 TlsCheck.java 的副本(使用其默认端点 tlstest.paypal.com)并通过我的 IDE 运行它,它返回以下内容(尽管它最初无法连接)
this client supports TLS 1.2
Successfully connected to TLS 1.2 endpoint
尝试与“api-3t.sandbox.paypal.com/2.0/”等其他端点相同,但无法连接到它说明
Failed to connect to TLS 1.2 endpoint
更新
原来我使用 TslCheck.jar 的测试失败了,因为 JAR 中使用的端点是“tlscheck.chargify.com”(无效??),但源代码(来自同一位置 https://github.com/paypal/TLS-update/tree/master/java)使用了不同的端点“tlstest.paypal.com”(有效)。
更新
尽管更新了 paypal_base.jar,但我目前看到“没有名为 PayPalAPIAA 的服务可用”,这最终导致 404 错误请求。还确认我在轴库中使用 HTTP/1.0 作为 HTTPSender,我们使用默认为 HTTP/1.1。我还没有找到绕过它的正确方法。我尝试按照https://www-10.lotus.com/ldd/pfwiki.nsf/dx/10022008035400PMWEBRCB.htm 切换到HTTP/1.1。这在我的情况下不起作用!!!!
【问题讨论】:
-
不是 Java 开发人员,所以这听起来可能很愚蠢 - 您是否明确强制使用 TLS 1.2(仅)连接?这是我必须在 .Net 中进行的更改(客户端可能支持更多协议,1.1 和 1.2,但在调用 Paypal 时必须仅使用 1.2)。嗯……
-
在将协议显式设置为 TLSv1.2 (java -Dhttps.protocols=TLSv1.2 -jar TlsCheck.jar) 时,我仍然使用他们的测试应用程序得到相同的结果。
标签: java soap paypal paypal-sandbox tls1.2