«SSLHandshakeException: никаких общих наборов шифров» - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь подключить клиента к серверу через безопасное соединение SSL, но мне кажется, что каждый раз выдается "SSLHandshakeExceptin: никаких общих наборов шифров".Я мог бы действительно помочь с этим.

Вот код сервера:

public ChatServer() {
    usedNames.add("arnold");
    SSLServerSocket ss = null;
    try {
        SecureRandom sr = new SecureRandom();
        String passphrase = "serverpwd";

        //read a file with client certificates
        KeyStore clientKeyStore = KeyStore.getInstance("JKS"); 
        clientKeyStore.load(new FileInputStream("client.public"), "public".toCharArray());

        //reads a file with servers certificate and secret key
        KeyStore serverKeyStore = KeyStore.getInstance("JKS"); 
        serverKeyStore.load(new FileInputStream("server.private"), passphrase.toCharArray());

        // tmf,kmf and sslContext
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
        tmf.init(clientKeyStore);
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(serverKeyStore, passphrase.toCharArray());
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), sr);

        // Create socket
        SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        ss = (SSLServerSocket) factory.createServerSocket(serverPort);
        ss.setNeedClientAuth(true); // client needs to have auth.
        ss.setEnabledCipherSuites(new String[]{"TLS_RSA_WITH_AES_128_CBC_SHA"});

    } catch (Exception e) {
        System.err.println("[system] could not create socket on port " + this.serverPort);
        e.printStackTrace(System.err);
        System.exit(1);
    }

    // start listening for new connections
    System.out.println("[system] listening ...");
    try {
        while (true) {
            Socket socket = ss.accept(); // connection established
            ((SSLSocket)socket).startHandshake(); //explicitly trigger SSL handshake
            String username = ((SSLSocket) socket).getSession().getPeerPrincipal().getName();

А вот код клиента:

SecureRandom sr = new SecureRandom();

        KeyStore serverKeyStore = KeyStore.getInstance("JKS");
        serverKeyStore.load(new FileInputStream("server.public"), "public".toCharArray());


        KeyStore clientKeyStore = KeyStore.getInstance("JKS");
        clientKeyStore.load(new FileInputStream(sslPrivate), passphrase.toCharArray());


        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
        tmf.init(serverKeyStore);
        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
        kmf.init(clientKeyStore, passphrase.toCharArray());
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), sr);

        // create socket
        SSLSocketFactory sf = sslContext.getSocketFactory();
        socket = (SSLSocket)sf.createSocket("localhost", serverPort);
        socket.setEnabledCipherSuites(new String[] { "TLS_RSA_WITH_AES_128_CBC_SHA" }); //(CipherSuite)
        socket.startHandshake(); // //explicitly trigger SSL handshake

Вот чтовыводит на консоль, где я запускаю «сервер»: enter image description here

И это на консоли, где я запускаю «клиент»: enter image description here

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