SSL-сервер на Java - javax.net.ssl.SSLException - PullRequest
1 голос
/ 07 марта 2012

Я пытаюсь создать сервер с использованием SSL, но получаю следующую ошибку:

"Сервер прерван: javax.net.ssl.SSLException: ни один из доступных сертификатов или ключей не соответствует включенным комплектам шифров SSL."

Я не уверен, правильно ли я создаю сертификаты. Вот мой код Я конвертирую старый TCP-сервер в SSL-сервер

// SSL Server

import java.net.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.net.ServerSocketFactory;
import javax.net.ssl.SSLServerSocketFactory;

public class SSL_Server {


public static void main(String[] args) {
    int port = 2018;
    ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault();
    ServerSocket ssocket = null;
    System.out.println("SSL_Server started");

    System.setProperty("javax.net.ssl.keyStore","mySrvKeystore");
    System.setProperty("javax.net.ssl.keyStorePassword","123456");

    final ExecutorService threadPool = Executors.newCachedThreadPool();

    try {
        ssocket = ssocketFactory.createServerSocket(port);
        InetAddress myIP =InetAddress.getLocalHost();
        System.out.println(myIP.getHostAddress());

        while(true){
            Socket aClient = ssocket.accept();
            //create a new thread for every client
            threadPool.submit(new SSL_ClientHandler(aClient));
        } 
    } 
    catch(Exception e) {
        System.err.println("Server aborted:" + e);
    } finally {
        try{
            ssocket.close();
        } catch (Exception e){
            System.err.println("could not close connection properly" + e);
        }
    }
    System.out.println("connection was closed successfully");
}

}

Ответы [ 2 ]

2 голосов
/ 18 марта 2014
System.setProperty("javax.net.ssl. keyStore","mySrvKeystore"); System.setProperty("javax.net.ssl. keyStorePassword","123456");

ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault(); 
ServerSocket ssocket = null; 
System.out.println("SSL_Server started");
1 голос
/ 07 марта 2012

Вы должны установить свойства, которые конфигурируют значение по умолчанию SSLContext (и, следовательно, значение по умолчанию SSLServerSocketFactory), прежде чем получить его, так как тогда оно будет настраиваться.

System.setProperty("javax.net.ssl.keyStore","mySrvKeystore");
System.setProperty("javax.net.ssl.keyStorePassword","123456");

ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault();
ServerSocket ssocket = null;
System.out.println("SSL_Server started");
...