java - SSL 握手异常 : Received fatal alert: handshake failure

标签 java web-services ssl openssl handshake

这里我屏蔽了一个“很简单”的主题,我无法得到响应解决方案提供商的支持。

我尝试使用支付线库(支付提供商),但它没有。我所做的只是下载他们的库,创建一个类来测试他们的示例,但脚本返回以下异常:

有关信息,链接以查看下载的内容支付线:https://support.payline.com/hc/fr/articles/201001237-Kit-d-int%C3%A9gration-JAVA

异常:

Apr 30, 2015 9:56:06 AM com.experian.payline.ws.wrapper.DirectPayment doAuthorization
SEVERE: Error during doAuthorization call :
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:117)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:194)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:122)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:123)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:626)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:585)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:570)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:467)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:308)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:163)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135)
at com.sun.proxy.$Proxy20.doAuthorization(Unknown Source)
at com.experian.payline.ws.wrapper.DirectPayment.doAuthorization(DirectPayment.java:110)
at test.launch.main(launch.java:42)

Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1979)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1086)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)
at sun.net.http://www.protocol.https.HttpsClien...ient.java:563)
at sun.net.http://www.protocol.https.AbstractDe...tion.java:185)
at sun.net.http://www.protocol.http.HttpURLConn...ion.java:1092)
at sun.net.http://www.protocol.https.HttpsURLCo...Impl.java:250)
at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:105)

... 15 more

和我的代码:

package test;

import java.util.Date;

import com.experian.payline.kit.utils.ConnectParams;
import com.experian.payline.ws.impl.DoAuthorizationResponse;
import com.experian.payline.ws.obj.Card;
import com.experian.payline.ws.obj.Order;
import com.experian.payline.ws.obj.Payment;
import com.experian.payline.ws.wrapper.DirectPayment;

public class launch {

    public static void main (String[] args){
        //System.setProperty("https.protocols", "TLSv1.2");
        ConnectParams params = new ConnectParams(null, false, true, "**************", "***************");

        DirectPayment directPayment = new DirectPayment(params);

        System.out.println(params.getProxyPort());

            Payment payment = new Payment();
            payment.setAmount("990"); 
            payment.setCurrency("978"); 
            payment.setAction("101"); 
            payment.setMode("CPT"); 
            payment.setContractNumber("0001/1234567"); 
            Order order = new Order();
            Date dNow = new Date();
            order.setRef("KIT_"+dNow.getTime());
        order.setAmount(payment.getAmount());
        order.setCurrency(payment.getCurrency());
        java.text.SimpleDateFormat s = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm"); 
        order.setDate(s.format(dNow));
        Card card = new Card(); 
        card.setType("CB"); 
        card.setNumber("1111222233334444"); 
        card.setExpirationDate("0118"); 
        card.setCvx("123");
        DoAuthorizationResponse res = directPayment.doAuthorization(payment, order, null, card, null, null, null, null);

        System.out.println(res.getResult());

}

}

调试 ssl

main, READ: TLSv1 Alert, length = 2
main, RECV TLSv1 ALERT:  fatal, handshake_failure
%% Invalidated:  [Session-1, SSL_RSA_WITH_RC4_128_MD5]
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal     alert: handshake_failure
main, called close()

我正在寻找,我仍然无法纠正“握手失败”这个问题。

我在我的 Mac 和 Debian 服务器(Java 7 on 2)上测试了这段代码

谢谢你的帮助

最佳答案

您在问题中提到您使用过 java 7。

您发布的链接说兼容版本是 Java 1.5 和 Java 1.6。代码已经过测试并且可以在这些版本上运行。

请检查 java 1.6 。这很容易成为兼容性问题。

来自链接

https://support.payline.com/hc/fr/articles/201001237-Kit-d-int%C3%A9gration-JAVA

兼容性工具包

JAVA 套件在以下环境中进行测试:

Windows XP 专业版/Windows 7 专业版 Tomcat 5.5 和 6.0.35 Java 1.5 & 1.6

关于java - SSL 握手异常 : Received fatal alert: handshake failure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29964278/

相关文章:

eclipse - 如何将 Java 7 JRE 添加到我的 mac 上的 Eclipse?

java - 集合分配、浅复制、惰性复制和深复制的区别和最佳方法

访问 hashmap 时出现 java.util.ConcurrentModificationException

web-services - Tomcat,JAX-RS( Jersey ),@PathParam : how to pass two variables containing slashes

ssl - 在 Ratpack 中,如何配置从外部文件加载配置?

java - 如果我更改 grails 域中的字段名称会怎样?

web-services - IOS 5 : How to return YES on contains: with 2 'identical' objects, 但具有不同的指针

java - 什么是 WSIL 文件?它有什么用呢?

使用 KSOAP2 和 HTTPS 的 Android 网络服务

apache - 来自 Apache/OpenSSL 的 SSL 间歇性 Firefox 和 Python 问题