Java WebSphere8.5上的SSL握手失败(使用Tomcat)

Java WebSphere8.5上的SSL握手失败(使用Tomcat),java,ssl,websphere,Java,Ssl,Websphere,长话短说;在Tomcat上工作的应用程序无法与Paypal服务器通信,有什么原因吗? 一些背景:我们正在Liferay上开发一系列Portlet,这些Portlet在某个时候与paypal服务器通信,以启动和验证购买流程。这就像本地tomcat上的charm一样,没有任何特殊配置,但在安装Liferay和portlet之后,它无法启动该过程。 堆栈如下所示: [16/12/14 13:51:01:728 GMT+01:00] 0000015d SystemOut O 13:51:01,7

长话短说;在Tomcat上工作的应用程序无法与Paypal服务器通信,有什么原因吗? 一些背景:我们正在Liferay上开发一系列Portlet,这些Portlet在某个时候与paypal服务器通信,以启动和验证购买流程。这就像本地tomcat上的charm一样,没有任何特殊配置,但在安装Liferay和portlet之后,它无法启动该过程。 堆栈如下所示:

[16/12/14 13:51:01:728 GMT+01:00] 0000015d SystemOut     O 13:51:01,727 ERROR [WebContainer : 2][render_portlet_jsp:132] null
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.ibm.jsse2.o.a(o.java:33)
    at com.ibm.jsse2.o.a(o.java:30)
    at com.ibm.jsse2.SSLSocketImpl.b(SSLSocketImpl.java:168)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:318)
    at com.ibm.jsse2.SSLSocketImpl.h(SSLSocketImpl.java:403)
    at com.ibm.jsse2.SSLSocketImpl.a(SSLSocketImpl.java:431)
    at com.ibm.jsse2.SSLSocketImpl.startHandshake(SSLSocketImpl.java:315)
    at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:103)
    at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:42)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1184)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:390)
    at com.ibm.net.ssl.www2.protocol.https.b.getResponseCode(b.java:82)
    at com.paypal.core.HttpConnection.execute(HttpConnection.java:93)
    at com.paypal.core.APIService.makeRequestUsing(APIService.java:176)
    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)
我已经“谷歌搜索”了一段时间,不知道错误在哪里。 我们已经尝试注册从贝宝网站检索到的Verisign证书的签名者,但没有任何改变

有人能给我们指出正确的方向吗? 谢谢
更新 提升网络日志记录级别后,我可以在日志中看到以下内容:

     O class com.ibm.websphere.ssl.protocol.SSLSocketFactory is loaded
     O instantiated an instance of class com.ibm.websphere.ssl.protocol.SSLSocketFactory
     O 
handshake: true
     O Ignoring unsupported cipher suite: SSL_RSA_WITH_AES_128_CBC_SHA
     O Ignoring unsupported cipher suite: SSL_DHE_RSA_WITH_AES_128_CBC_SHA
     O Ignoring unsupported cipher suite: SSL_DHE_DSS_WITH_AES_128_CBC_SHA
     O %% No cached client session
     O *** ClientHello, SSLv3
     O RandomCookie:  GMT: 1402031796 bytes = { 166, 100, 171, 183, 214, 31, 12, 68, 124, 68, 151, 195, 7, 4, 28, 112, 39, 90, 248, 143, 129, 106, 212, 33, 244, 40, 233, 94 }
     O Session ID:  {}
     O Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_FIPS_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_RENEGO_PROTECTION_REQUEST]
     O Compression Methods:  { 0 }
     O ***
     O [write] MD5 and SHA1 hashes:  len = 75
     O 0000: 01 00 00 47 03 00 54 91  4f b4 a6 64 ab b7 d6 1f  ...G..T.O..d....
0010: 0c 44 7c 44 97 c3 07 04  1c 70 27 5a f8 8f 81 6a  .D.D.....p.Z...j
0020: d4 21 f4 28 e9 5e 00 00  20 00 04 00 05 00 0a fe  ................
0030: ff 00 16 00 13 00 66 00  09 fe fe 00 15 00 12 00  ......f.........
0040: 03 00 08 00 14 00 11 00  ff 01 00                 ...........

     O WebContainer : 10, WRITE: SSLv3 Handshake, length = 75
     O [Raw write]: length = 80
     O 0000: 16 03 00 00 4b 01 00 00  47 03 00 54 91 4f b4 a6  ....K...G..T.O..
0010: 64 ab b7 d6 1f 0c 44 7c  44 97 c3 07 04 1c 70 27  d.....D.D.....p.
0020: 5a f8 8f 81 6a d4 21 f4  28 e9 5e 00 00 20 00 04  Z...j...........
0030: 00 05 00 0a fe ff 00 16  00 13 00 66 00 09 fe fe  ...........f....
0040: 00 15 00 12 00 03 00 08  00 14 00 11 00 ff 01 00  ................

     O [Raw read]: length = 5
     O 0000: 15 03 00 00 02                                     .....

     O [Raw read]: length = 2
     O 0000: 02 28                                              ..

     O WebContainer : 10, READ: SSLv3 Alert, length = 2
     O WebContainer : 10, RECV TLSv1 ALERT:  fatal, handshake_failure
     O WebContainer : 10, called closeSocket()
     O WebContainer : 10, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
     O 
handshake: true
     O Ignoring unsupported cipher suite: SSL_RSA_WITH_AES_128_CBC_SHA
     O Ignoring unsupported cipher suite: SSL_DHE_RSA_WITH_AES_128_CBC_SHA
     O Ignoring unsupported cipher suite: SSL_DHE_DSS_WITH_AES_128_CBC_SHA
     O %% No cached client session
     O *** ClientHello, SSLv3
     O RandomCookie:  GMT: 1402031797 bytes = { 153, 95, 153, 155, 68, 36, 152, 92, 71, 172, 226, 104, 156, 107, 235, 73, 63, 239, 198, 202, 166, 216, 158, 26, 45, 59, 169, 169 }
     O Session ID:  {}
     O Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_RC4_128_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_RSA_FIPS_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, SSL_RENEGO_PROTECTION_REQUEST]
     O Compression Methods:  { 0 }
     O ***
     O [write] MD5 and SHA1 hashes:  len = 75
     O 0000: 01 00 00 47 03 00 54 91  4f b5 99 5f 99 9b 44 24  ...G..T.O.....D.
0010: 98 5c 47 ac e2 68 9c 6b  eb 49 3f ef c6 ca a6 d8  ..G..h.k.I......
0020: 9e 1a 2d 3b a9 a9 00 00  20 00 04 00 05 00 0a fe  ................
0030: ff 00 16 00 13 00 66 00  09 fe fe 00 15 00 12 00  ......f.........
0040: 03 00 08 00 14 00 11 00  ff 01 00                 ...........

     O WebContainer : 10, WRITE: SSLv3 Handshake, length = 75
     O [Raw write]: length = 80
     O 0000: 16 03 00 00 4b 01 00 00  47 03 00 54 91 4f b5 99  ....K...G..T.O..
0010: 5f 99 9b 44 24 98 5c 47  ac e2 68 9c 6b eb 49 3f  ...D...G..h.k.I.
0020: ef c6 ca a6 d8 9e 1a 2d  3b a9 a9 00 00 20 00 04  ................
0030: 00 05 00 0a fe ff 00 16  00 13 00 66 00 09 fe fe  ...........f....
0040: 00 15 00 12 00 03 00 08  00 14 00 11 00 ff 01 00  ................

     O [Raw read]: length = 5
     O 0000: 15 03 00 00 02                                     .....

     O [Raw read]: length = 2
     O 0000: 02 28                                              ..

     O WebContainer : 10, READ: SSLv3 Alert, length = 2
     O WebContainer : 10, RECV TLSv1 ALERT:  fatal, handshake_failure
     O WebContainer : 10, called closeSocket()
     O WebContainer : 10, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
     O 10:41:09,593 ERROR [WebContainer : 10][PaypalUtils:145] Errores en setPaypalExpressCheckout
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
    at com.ibm.jsse2.o.a(o.java:33)
    at com.ibm.jsse2.o.a(o.java:30)
服务器控制台中配置的SSL协议是TLS

收到致命警报:握手失败

这可能是任何情况,比如缺少客户端证书、没有共享密码、协议版本错误等,但通常与证书验证无关

请与其他客户核实,与SSLLAB等核实,以减少可能的原因。有关调试中可能尝试的步骤以及需要他人帮助时应收集的信息,请参见。如果你有更多的信息,把它贴在这里,这样你就有希望找到解决你问题的方法

根据问题中的新信息进行编辑:

 O *** ClientHello, SSLv3
 ...
 O 0000: 16 03 00

您正在使用SSL 3.0,这可以从调试消息中看到。由于POODLE的原因,大多数主要网站都阻止了SSL 3.0。虽然您声称已经使用了TLS1.x,但根据这些调试信息,情况似乎并非如此,因此您应该再次检查设置。

通常在Websphere中,您需要导入要与之通信的服务器的证书。如果您手动尝试,您可能不会在链中导入适当的证书,因此在管理控制台中使用“从端口检索”


另一个选择是,由于贵宾犬问题,Paypal正在终止SSL:)。将安全级别提高到TLS在这种情况下,在管理控制台的安全菜单中,跟踪显示您收到了来自远程服务器的握手失败。我可以看到您的服务器发送了一条客户机hello消息,因此您希望看到一条带有服务器hello消息的响应,而不是连接从另一端突然结束。在这些情况下,您需要来自远程的人员查看并告诉您此连接失败的原因。否则,你真的是在黑暗中工作,你可以尝试许多不同的事情


然而,我注意到的一点是,您正在使用SSLv3协议,而另一端似乎正在使用TLSv1协议。我假设像Paypal这样的实体可能是FIPS兼容的,这意味着他们停止使用SSL协议,只使用TLS作为兼容的一部分

您需要将paypal服务器证书添加到NodeDefaultTrustStore(对于单服务器)或CellDefaultTrustStore(如果您使用部署管理器运行WAS ND)。可能不需要。此警报来自服务器,与客户端完成的证书验证无关。查看数据包捕获或ssldump应该非常简单,以了解客户端握手在这两台服务器中的不同之处—客户端hello版本、扩展等。javax.net.debug=所有这些都将是一种更加引人注目的方式。可能的候选客户是使用SSLv3或TLSv1.2的一个或另一个客户机,并导致出现问题。正如我所说,我们已经将Paypal证书添加到Websphere。无论如何谢谢@Gas。基于Steffen信息-检查
SSL证书和密钥管理>SSL配置>NodeDefaultSSLSettings>保护质量(QoP)设置中设置的协议
我将使用您提供的链接查看我们的配置。谢谢您是否已在信任库中添加来自终结点的证书?请参阅编辑:您正在使用SSL 3.0,这可能在服务器上被拒绝。谢谢@Raul Lapeira Herrero。安全级别已经在SSL_TLS上设置,因此它应该能够处理这两个问题。我们会继续调查的。格雷西亚斯!;-)