Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSLSocket握手失败_Java_C_Ssl_Connection - Fatal编程技术网

Java SSLSocket握手失败

Java SSLSocket握手失败,java,c,ssl,connection,Java,C,Ssl,Connection,我试图找到一种方法,使用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.

我试图找到一种方法,使用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和服务器。

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

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


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

是的,Java和C之间完全可以通过SSL进行通信

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


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

尝试设置此系统属性:

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

这将为您提供有关握手过程中发生的情况的大量调试信息。

尝试设置此系统属性:

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

这将为您提供有关握手过程中发生的情况的大量调试信息。

此特定SSL错误可能由于许多不同的原因而发生。尝试从服务器获取日志,它会告诉您原因。发生此特定SSL错误的原因可能有很多。尝试从服务器获取日志,它会告诉您原因。