Java SSLSocket握手失败 [英] Java SSLSocket handshake failure

查看:1008
本文介绍了Java SSLSocket握手失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



这是一个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();
}
}

这只是几个函数建立连接并执行握手,但我收到此错误:

 线程main中的异常javax.net.ssl.SSLHandshakeException:
接收到致命警报: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结果:1

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



任何帮助?



编辑:



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

解决方案

可能通过SSL在Java和C之间通信。



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



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


I'm trying to find a way to establish a connection beetwen a Java client and a C server using SSL.

This is the java client:

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();
    }
}

It's only a few functions to establish connection and perform handshake, but I'm getting this error:

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

Unfortunately I don't have any sources of the server program - I only know the protocol. Is it even possible to connect java and C++ using ssl? AFAIK server is written using openssl.

Any help?

EDIT:

I'm connecting from Windows to Linux and server's using posix sockets.

解决方案

Yes, it's definitely possible to communicate via SSL between Java and C.

The Java client code may be failing because it doesn't recognise the server certificate being sent.

You need to make sure that the server's certificate is present in the Java client's trust store.

这篇关于Java SSLSocket握手失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆