Java SSLSocket сбой рукопожатия - PullRequest
       21

Java SSLSocket сбой рукопожатия

1 голос
/ 18 декабря 2009

Я пытаюсь найти способ установить соединение между клиентом Java и сервером C с использованием SSL.

Это 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.

Любая помощь?

EDIT:

Я подключаюсь из Windows к Linux и серверу, используя posix-сокеты.

Ответы [ 2 ]

1 голос
/ 08 января 2010

Да, определенно возможно обмениваться данными через SSL между Java и C.

Возможно, клиентский код Java не работает, поскольку он не распознает отправляемый сертификат сервера.

Необходимо убедиться, что сертификат сервера присутствует в доверенном хранилище клиента Java.

0 голосов
/ 29 января 2012

Попробуйте установить это системное свойство:

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

Это даст вам много отладочной информации о том, что происходит во время рукопожатия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...