伺服器:Windows Server 2012
冷聚变:9,0,1,274733
更新级别:hf901-00011.jar
在Java版本上运行:1.7.0_79
Java主目录指向正确的路径。

所有证书(实时证书和沙箱证书)都导入到此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文件时,无需将特定证书导入密钥库就可以与实时api进行连接。

我不知道为什么到沙箱的连接失败。也许我可以在这里得到新的提示?
如果需要更多信息,请告诉我。先感谢您。

最佳答案

问题解决了!

Scott Jibben(请参阅上面的评论)提到,PayPal沙盒可能已经拒绝TLS1连接,以便在PayPal实时API中进行更改。
这是绝对正确的。但是在CF11中这不是问题,因为CF11及其JRE已经在使用TLSv1.2,而CF8-10在使用其JRE的默认协议。
如果不是,则可以强制CF使用带有JVM参数的TLSv1.2

-Dhttps.protocols=TLSv1.2


短:

无论将JVM启动参数-Dhttps.protocols设置为什么,CF8-10在与JDK1.70_79及更低版本一起运行时都使用TLSv1。
这是因为这些Java版本的默认协议是TLSv1,而CF8-10只是忽略了JVM启动参数-Dhttps.protocols,而始终使用JDK的默认协议。
CF11对此进行了更改,因此可以正常使用。

阅读来自Wil Genovese的帖子中的详细信息,网址为:
https://www.trunkful.com/index.cfm/2014/12/8/Preventing-SSLv3-Fallback-in-ColdFusion

我做了什么

我已经安装了JDK1.8.0_144并设置了Cold Fusion 9来使用它。从那时起,在api-3t.sandbox.paypal.com上与PayPal沙箱API的连接运行良好。

希望这对旧版本的CF9有所帮助。

09-10 05:41
查看更多