# SSLServerSocket mit eigenem .keystore als SSL Dienst



## Romsl (4. Juli 2006)

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:


```
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


----------



## AppleJünger (6. Juli 2006)

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...


----------



## Romsl (6. Juli 2006)

Hi,

ich bekomme leider immer diese Exception.


```
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


----------

