我使用的是merchantsdk-2.13.117(最新版本)。执行以下代码时,我收到SSLException:
PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(sdkConfig);
SetExpressCheckoutResponseType setExpressCheckoutResponse = service.setExpressCheckout(setExpressCheckoutReq);
Paypal计划改变他们的SSL通信。据我了解,将来只支持“SSL认证VeriSign G5”。出于这个原因,他们将这一变化实施到他们的沙盒中。由于这种变化,我收到了上述异常(在它正常工作之前)。
我现在究竟需要改变什么:
- 切换Java版本(使用Java 7)
- 更改
sdkConfig
中的一些参数(参见上面的代码),这是一个包含以下参数的地图:acct1.Signature,acct1.Password,acct1.UserName,acct1.AppId,mode
- 在服务器上执行一些更改(使用Tomcat)
- 别的什么?
这里,控制台输出的一部分:
javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1842)
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1825)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1346)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1300)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:468)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338)
at com.paypal.core.HttpConnection.execute(HttpConnection.java:109)
at com.paypal.core.APIService.makeRequestUsing(APIService.java:177)
at com.paypal.core.BaseService.call(BaseService.java:265)
at urn.ebay.api.PayPalAPI.PayPalAPIInterfaceServiceService.setExpressCheckout(PayPalAPIInterfaceServiceService.java:2196)
at urn.ebay.api.PayPalAPI.PayPalAPIInterfaceServiceService.setExpressCheckout(PayPalAPIInterfaceServiceService.java:2148)
答案 0 :(得分:0)
我找到了解决这个问题的方法:
在我的项目中,旧版本的Bouncy Castle被列为外部库:
<dependency>
<groupId>bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
<version>138</version>
</dependency>
这会导致使用SSL通信时出现问题。从我的项目中完全删除库后,与Paypal的SSL通信再次起作用(使用Java 6,7和8)。