2011-01-09 20 views
10

Estoy en una nueva instalación de Ubuntu que acaba de instalarse OpenJDK:¿Está roto Java SSL en OpenJDK en Ubuntu?

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

No estoy seguro si esto es relevante, pero estoy corriendo desde dentro de VMWare Fusion.

La siguiente línea:

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

throws the following exception: 

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

Mis colegas y yo hemos intentado esto en varias máquinas, todas las instalaciones nuevas de Ubuntu, y seguir recibiendo este. Me aconsejaron que probara getInstance ("TLSv1"), pero esto arrojó el mismo error. Parece algo realmente fundamental para no funcionar, así que creo que debemos estar haciendo algo mal.

Respuesta

6

de Guido me señaló en la dirección correcta. Es solo cuestión de hacer:

sudo apt-get install libbcprov-java 
2

openjdk incluido con ubuntu puede estar perdiendo un proveedor de JCE; descargue bouncycastle crypto api desde http://www.bouncycastle.org/ (es un proyecto de código abierto que implementa JCE) y póngalo en su classpath del proyecto.

Luego, en tu clase se refieren a la siguiente código de ejemplo: Respuesta

 
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; 
} 
Cuestiones relacionadas