繁体   English   中英

Java SSLSocket握手失败

[英]Java SSLSocket handshake failure

我正在尝试找到一种使用SSL在Java客户端和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

不幸的是,我没有服务器程序的任何来源-我只知道协议。 甚至可以使用ssl连接Java和C ++吗? AFAIK服务器是使用openssl编写的。

有什么帮助吗?

编辑:

我正在使用posix套接字从Windows连接到Linux和服务器。

是的,在Java和C之间肯定可以通过SSL进行通信。

Java客户端代码可能失败,因为它无法识别正在发送的服务器证书。

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

尝试设置此系统属性:

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

这将为您提供有关握手期间发生的情况的许多调试信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM