Java的SSLSocket的握手失败(Java SSLSocket handshake failu

2019-10-18 18:45发布

我试图找到一种方法来建立beetwen Java客户端,并使用SSL一个C服务器的连接。

这是Java客户端:

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class Main {

    public static void main(String[] args) throws IOException {

        SSLSocketFactory sslsockfact = 
            (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket sslsocket = (SSLSocket) sslsockfact.createSocket(
            args[0], Integer.parseInt(args[1]));
        sslsocket.startHandshake();
        System.in.read();
    }
}

这是一个只有少数函数建立连接并进行握手,但我得到这个错误:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: 
  Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(
      SSLSocketImpl.java:1657)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(
      SSLSocketImpl.java:932)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(
      SSLSocketImpl.java:1096)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(
      SSLSocketImpl.java:1123)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(
      SSLSocketImpl.java:1107)
    at posslu.Main.main(Main.java:22)
Java Result: 1

不幸的是我没有服务器程序的任何来源 - 我只知道的协议。 它甚至有可能连接Java和C ++使用SSL? AFAIK服务器使用OpenSSL的写入。

任何帮助吗?

编辑:

我从Windows连接到Linux和服务器的使用POSIX插座。

Answer 1:

是的,这是绝对有可能通过Java和C之间的SSL通信

Java客户端代码可能失败,因为它不承认发送的服务器证书。

您需要确保服务器的证书存在于Java客户端的信任库中。



Answer 2:

尝试设置此系统属性:

System.setProperty("javax.net.debug", "all");

这会给你什么是握手期间发生太多的调试信息。



文章来源: Java SSLSocket handshake failure