【发布时间】:2018-01-03 00:00:06
【问题描述】:
服务器:Windows Server 2012 冷聚变:9,0,1,274733 更新级别:hf901-00011.jar 在java版本上运行:1.7.0_79 Java home 指向正确的路径。
所有证书(用于实时和沙盒)都导入到此 JDK 1.7.0_79 的密钥库中。我已经对其进行了测试,重命名 cacerts 文件会导致连接到实时 API 时出错。
使用 keytool 测试 cacerts 文件显示正确导入了适当的证书。
一个小订单应用程序使用 PayPal 提供付款。
第一步是使用“setExpressCheckout”方法连接到 PayPal。 在 URL https://api-3t.paypal.com/nvp 上使用 NVP 与实时 API 的连接工作并提供令牌 URL 字符串。 在 URL https://api-3t.sandbox.paypal.com/nvp 使用 NVP 连接到沙盒 API 失败并返回错误响应:
I/O Exception: peer not authenticated
Connection Failure
Unable to determine MIME type of file.
Connection Failure. Status code unavailable.
从服务器调用 URL https://api-3t.sandbox.paypal.com/nvp 有效。
测试 1
- 为 api-3t.sandbox.paypal.com 导入沙盒证书
- 重启CF服务
- 连接测试失败并出现同样的错误
测试 2
- 将 cacerts 文件重命名为 cacerts.bak
- 将 cacerts 文件从 jre1.8.0_31\lib\security 复制到 1.7.0_79\lib\security
- cacerts 文件中没有特定的 PayPal 证书
- 重启CF服务
- 连接到实时 API 工作
- 与沙盒 api 的连接失败并出现同样的错误
奇怪的是,在使用 1.8xx cacerts 文件时,无需将特定证书导入密钥库即可连接到 live api。
我无法弄清楚为什么与沙盒的连接失败。也许我可以在这里得到新的提示? 如果需要更多信息,请告诉我。提前谢谢你。
【问题讨论】:
-
我从 PayPal 收到通知,他们将禁用 TLS 1.1 和更早的密码(我认为是在 2017 年 9 月 1 日)。也许沙盒已经禁用了旧密码,并且您使用的 JRE 失败了,因为它没有使用 TLS 1.2。这篇文章可能有更好的信息:superuser.com/questions/747377/…
-
@Scott 谢谢你。我现在正在查看在 JVM 启动参数中使用 -Djavax.net.debug=all 的出站会话。也许你的回答会引导我走向更好的方向。
-
另请注意,自 2017 年 1 月 1 日起,Paypal Express Checkout 的 NVP/SOAP 集成方法已被弃用,这可能是沙箱不再工作的原因(我使用的是 TLS 1.2,但仍然无法连接)
-
在我更新到 JDK1.8.0_144 后,连接工作正常。即使没有将证书导入密钥库。
标签: paypal paypal-sandbox coldfusion-9