2011-01-09 7 views
10

jestem na świeżym zainstalować Ubuntu po prostu zainstalować OpenJDK:Czy protokół Java SSL jest uszkodzony w OpenJDK w systemie Ubuntu?

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

Nie jestem pewien, czy to jest istotne, ale biegnę go od wewnątrz VMWare Fusion.

następujący wiersz:

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

throws the following exception: 

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

Moi koledzy i ja próbowaliśmy to na kilku komputerach, wszystkie świeże instalacje Ubuntu i trzymać się tego. Poradzono mi, aby wypróbować getInstance ("TLSv1"), ale to spowodowało ten sam błąd. Wydaje się, że coś naprawdę podstawowego nie działa, więc myślę, że musimy zrobić coś złego.

Odpowiedz

6

Guido wskazał mnie we właściwym kierunku. To tylko kwestia:

sudo apt-get install libbcprov-java 
2

openjdk dostarczany z Ubuntu może brakować dostawcy JCE; pobierz bouncycastle crypto api z http://www.bouncycastle.org/ (jego projektu open source realizacji JCE) i umieścić go w ścieżce klasy projektu.

Następnie w swojej klasie znajdują się w następujący przykładowy kod: odpowiedź

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