SSLServerSocket e certificado de configuração

Eu escrevi um programa Java cliente / servidor usandoServerSocket eSocket objetos. Modifiquei o código para usarSSLServerSocket e 'SSLSocket`, no entanto, estou recebendo diferentes exceções, incluindo:

javax.net.ssl.SSLHandshakeException: no cipher suites in common

Espero fazer o máximo programaticamente possível. Também estou bem com certificados autoassinado

m tutorial que segui sugeriu a criação de um certificado com okeytool java, movendo esse arquivo para o seu projeto java. Eu fiz isso com o comando terminalkeytool -genkey -alias zastore -keyalg RSA -keystore za.store. Eu atribuí a senha comopassword.

Então chamo a funçãoSystem.setProperty na esperança de os SSLSockets funcionarem, mas ainda não funcion

Aqui está o código do meu servidor

public class Server implements Runnable
{
    private SSLServerSocket serverSocket;
    private int portNumber;
    private Thread acceptThread;

    private LinkedList<Connection> connections;

    private ConnectionListener connectionListener;

    public Server(int port, ConnectionListener connectionListener)
    {
        this.connectionListener = connectionListener;
        portNumber = port;
        connections = new LinkedList<Connection>();
        try 
        {
            System.setProperty("javax.net.ssl.trustStore", "za.store");
            System.setProperty("javax.net.ssl.keyStorePassword", "password");
            SSLServerSocketFactory sslssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();

            serverSocket = (SSLServerSocket) sslssf.createServerSocket(portNumber,15);

        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }

    public void startListening()
    {
        acceptThread = new Thread(this);
        acceptThread.start();
    }
    public void stopListening()
    {

        for(Connection c:connections)
        {
            c.stopListeningAndDisconnect();
        }

        try 
        {   
            serverSocket.close();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    @Override
    public void run() 
    {
        try 
        {
            while(true)
            {
                SSLSocket s = (SSLSocket) serverSocket.accept();
                Connection c = new Connection(s,connectionListener);
                connections.add(c);
                System.out.println("New Connection Established From"+s.getInetAddress().toString());
            }
        } 
        catch(java.net.SocketException e)
        {
            System.out.println("Listening thread terminated with exception.");
        }
        catch(IOException e) 
        {

            e.printStackTrace();
        }
    }

    public void removeConnection(Connection c)
    {
        connections.remove(c);
    }

    public void printConnections()
    {
        System.out.println("Number of connections "+connections.toString());

        for(int i=0; i<connections.size(); i++)
        {
            System.out.println(connections.toString());
        }
    }

}

E, em seguida, um snipbit do meu código de cliente que se conecta quando um botão é pressionado:

@Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource() == connect)
        {
            try 
            {
                System.setProperty("javax.net.ssl.trustStore", "za.store");
                System.setProperty("javax.net.ssl.keyStorePassword", "password");



                SSLSocketFactory sslsf = (SSLSocketFactory)SSLSocketFactory.getDefault();

                SSLSocket s = (SSLSocket)sslsf.createSocket(ipBox.getText(), Integer.parseInt(portBox.getText()));
                Connection c = new Connection(s,parent);
                parent.connectionSuccessful(c);
            } 
            catch (NumberFormatException e1) 
            {
                JOptionPane.showMessageDialog(this, "Error! Port number must be a number", "Error", JOptionPane.ERROR_MESSAGE);             
            } 
            catch (UnknownHostException e1) 
            {
                JOptionPane.showMessageDialog(this, "Error! Unable to find that host", "Error", JOptionPane.ERROR_MESSAGE);
            } 
            catch (IOException e1) 
            {


e1.printStackTrace();
        }   
    }
}

artigo @Um Stackoverflow sugeriu que meu servidor "não possui um certificado". Não sei o que isso significa ou como conseguir um e localizá-lo no lugar cert

questionAnswers(2)

yourAnswerToTheQuestion