2011-01-09 7 views
10

sono su una nuova installazione di Ubuntu aver appena installato OpenJDK:è Java SSL rotto in OpenJDK su Ubuntu?

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

Non so se questo è rilevante, ma sto correndo dal di dentro VMWare Fusion.

la seguente riga:

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

throws the following exception: 

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

I miei colleghi ed io abbiamo provato questo su più macchine, tutte le nuove installazioni di Ubuntu, e tenere sempre presente. Mi è stato consigliato di provare getInstance ("TLSv1"), ma questo buttato lo stesso errore. Sembra qualcosa di veramente fondamentale di non lavorare così ho dato dobbiamo fare qualcosa di sbagliato.

risposta

6

di Guido mi ha segnalato nella giusta direzione. E 'solo una questione di fare:

sudo apt-get install libbcprov-java 
2

openjdk fornita con Ubuntu può mancare un fornitore di JCE; scaricare l'api crypto BouncyCastle da http://www.bouncycastle.org/ (suo un progetto open source attuazione JCE) e metterlo nel classpath del progetto.

Poi nella classe fare riferimento al seguente codice di esempio: risposta

 
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; 
} 
Problemi correlati