2011-01-09 5 views
10

ich auf einem frischen bin installieren von Ubuntu haben OpenJDK gerade installiert:Ist Java SSL in OpenJDK unter Ubuntu gebrochen?

OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode) on Ubuntu 64 bit 10.10 

nicht sicher, ob dies relevant ist, aber ich bin es aus VMWare Fusion läuft.

Die folgende Zeile:

javax.net.SSLContext.getDefault(); // same as getInstance("Default") 

throws the following exception: 

java.net.SocketException: java.security.NoSuchAlgorithmException: Default SSLContext not available 

Meine Kollegen und ich haben schon versucht, diese auf mehreren Maschinen, alle Neuinstallationen von Ubuntu, und halten Sie diese immer. Es wurde mir geraten, getInstance ("TLSv1") zu versuchen, aber das warf denselben Fehler auf. Scheint etwas wirklich Grundlegendes zu sein, um nicht zu arbeiten, also denke ich, dass wir etwas falsch machen müssen.

Antwort

6

Antwort des guido wies mich in die richtige Richtung. Es ist nur eine Frage des Tuns:

sudo apt-get install libbcprov-java 
2

openjdk ausgeliefert mit Ubuntu fehlt möglicherweise ein JCE-Provider; lade die bouncycastle crypto api von http://www.bouncycastle.org/ herunter (es ist ein Open-Source-Projekt, das JCE implementiert) und lege es in deinen Projekt-Klassenpfad.

Dann in Ihrer Klasse auf den folgenden Beispielcode siehe:

 
static { 
    Security.addProvider(new BouncyCastleProvider()); 
} 

public SSLSocket getSSLSocket() { 

    // Load the Keystore 
    KeyStore ks = KeyStore.getInstance(keystoreType); 
    ks.load(new FileInputStream(this.keyStorePath),this.keyStorePass.toCharArray()); 

    // Get a KeyManager and initialize it 
    KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509"); 
    kmf.init(ks, this.keyStorePass.toCharArray()); 

    // Get a TrustManagerFactory and init with KeyStore 
    TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509"); 
    tmf.init(ks); 

    // Get the SSLContext to help create SSLSocketFactory 
    SSLContext sslc = SSLContext.getInstance("TLS"); 
    sslc.init(kmf.getKeyManagers(), null, null); 

    // Get SSLSocketFactory and get a SSLSocket 
    SSLSocketFactory sslsf = sslc.getSocketFactory(); 
    SSLSocket socket = (SSLSocket) sslsf.createSocket(host, port); 
    return socket; 
} 
Verwandte Themen