Проблема с SSL-соединением Java Client-Server: javax.net.ssl.SSLHandshakeException: нет общих наборов шифров

Основная цель этого приложения — генерировать ключ AES на стороне сервера по запросу и доставлять его клиенту с помощью SSL. В настоящее время я получаю две ошибки. Ошибка сервера:

javax.net.ssl.SSLHandshakeException: нет общих наборов шифров

Сторона клиента:

javax.net.ssl.SSLHandshakeException: получено фатальное предупреждение: handshake_failure

У меня нет большого опыта работы с SSL, поэтому я не уверен, что вызывает эти ошибки.

public class TCPServer extends Thread {

    public static void main(String[] args) {
        // ransome
        int port = 49002;

        String password = "password12345678";
        // Build key
        byte[] key = Arrays.copyOf(password.getBytes(), 16);
        System.out.println("SERVER KEY");
        String keyString = key.toString();

        Socket sslsocket = null;
        try {
            String clientRequest;
            SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
            ServerSocket sslserversocket = sslserversocketfactory.createServerSocket(port);
            while (true) {
                System.out.println("SERVER accepting connections");
                sslsocket = sslserversocket.accept();
                /// Socket clientConnectionSocket = serverSocket.accept();

                System.out.println("SERVER accepted connection (single threaded so others wait)");
                // This is regarding the server state of the connection
                while (sslsocket.isConnected() && !sslsocket.isClosed()) {

                    BufferedReader inFromClient = new BufferedReader(new InputStreamReader(sslsocket.getInputStream()));
                    DataOutputStream outToClient = new DataOutputStream(sslsocket.getOutputStream());
                    clientRequest = inFromClient.readLine();

                    if (clientRequest != null)
                        outToClient.write(key);

                    else {
                        sslsocket.close();
                        System.out.println("SERVER client connection closed");
                    }
                    // System.out.println("SERVER client connection closed");
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            if (sslsocket != null) {
                try {
                    sslsocket.close();
                } catch (IOException ioe) {
                    // ignore
                }
            }
        }
    }
}

public class TCPClient extends Thread {

    public static void main() {
        String host = "localhost";
        int serverPort = 49002;
        Socket sslsocket = null;
        // ransome

        byte[] key = null;
        String keyString;

        try {
            InetAddress address = InetAddress.getByName(host);

            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            sslsocket = sslsocketfactory.createSocket(address, serverPort);

            BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));

            System.out.println("CLIENT opening socket");
            System.out.println("CLIENT connected to server");

            DataOutputStream outToServer = new DataOutputStream(sslsocket.getOutputStream());
            BufferedReader inFromServer = new BufferedReader(new InputStreamReader(sslsocket.getInputStream()));

            // outToServer.writeBytes(request + '\n');

            keyString = inFromServer.readLine();
            key = keyString.getBytes();

            sslsocket.close();
            System.out.println("Client KEY" + key);
        } catch (Exception e) {
            e.printStackTrace();
            try {
                if (sslsocket != null) {
                    sslsocket.close();
                }
            } catch (Exception cse) {
                // ignore exception here
            }
        }
    }
}

person champskee    schedule 03.04.2017    source источник
comment
На вашем сервере нет сертификата или даже хранилища ключей.   -  person user207421    schedule 04.04.2017
comment
Почему клиент не может создать собственный ключ AES? и если это нужно знать и серверу, и клиенту, почему бы просто не использовать вместо этого SSL?   -  person user207421    schedule 30.04.2017