SSLServerSocket mit eigenem .keystore als SSL Dienst

Romsl

Erfahrenes Mitglied
Hi,

kennt sich jemand mit SSL Verschlüsselung und .keystore (KeyStore) in Java aus? Ich bräuchte nur ein kleines Beispiel das mir zeigt wie ich einen SSLServerSocket mit eigenem Zertifikat laufen lasse und dann mit Clients per SSLSocket verbinde und auch übertrage.

Aktueller Stand:

Java:
public ServerSocket createServerSocket(int port) throws ProxyException {
        try {
            SSLServerSocket sslServerSocket = (SSLServerSocket) SSLServerSocketFactory.getDefault().createServerSocket(port);

            try {
                KeyStore keyStore = KeyStore.getInstance("JKS");

                InputStream stream = getClass().getClassLoader().getResourceAsStream(".keystore");

                char[] pass = "654321".toCharArray();

                try {
                    keyStore.load(stream, pass);
                }
                catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
                catch (CertificateException e) {
                    e.printStackTrace();
                }
            }
            catch (KeyStoreException e) {
                e.printStackTrace();
            }

            return sslServerSocket;
        }
        catch (IOException ioe) {
            throw new ProxyException(ioe.getMessage(), ioe);
        }
    }

    public Socket acceptSocket(ServerSocket serverSocket) throws ProxyException {

        try {
            if (serverSocket instanceof SSLServerSocket) {
                SSLServerSocket sslServerSocket = (SSLServerSocket) serverSocket;

                return sslServerSocket.accept();
            }
        }
        catch (IOException ioe) {
            throw new ProxyException(ioe.getMessage(), ioe);
        }

        throw new ProxyException("The ServerSocket isn't an instance of SSLServerSocket.");
    }

Das sind Methoden die ich in einem Interface definiert habe und mir die ServerSocket und Socket erzeugen.

PS: Das Zertifikat habe ich mit dem keytool erzeugt. Keine Ahnung ob das stimmt. Geht/Ginge das auch direkt im Code?

Gruß

Romsl
 
Hallöchen,

ich mach das mit dem Keystore von der Kommandozeile aus:

java -Djavax.net.ssl.keyStore=.../myKeystore -Djavax.net.ssl.keyStorePassword=asdfghjkl STARTKLASSE

Ich weiss, dass das auch per Code geht, weiss aber momentan nicht wie...
 
Hi,

ich bekomme leider immer diese Exception.

Java:
javax.net.ssl.SSLException: No available certificate corresponds to the SSL cipher suites which are enabled.
	at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.a(DashoA12275)
	at com.sun.net.ssl.internal.ssl.SSLServerSocketImpl.accept(DashoA12275)

Gruß

Romsl
 
Zurück