2011-01-09 38 views
10

Tôi đang trên một tươi cài đặt của Ubuntu đã chỉ cần cài đặt OpenJDK:Java SSL có bị hỏng trong OpenJDK trên Ubuntu không?

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

Không chắc nếu điều này là có liên quan, nhưng tôi đang chạy nó từ bên trong VMWare Fusion.

Các dòng sau:

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

throws the following exception: 

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

Đồng nghiệp của tôi và tôi đã cố gắng này trên một số máy, tất cả các cài đặt mới của Ubuntu, và cứ bị này. Tôi đã được khuyên nên thử getInstance ("TLSv1"), nhưng điều này đã ném cùng một lỗi. Có vẻ như một cái gì đó thực sự cơ bản để không được làm việc vì vậy tôi con số chúng ta phải làm điều gì đó sai trái.

Trả lời

6

Guido đã chỉ cho tôi đi đúng hướng. Đó chỉ là vấn đề:

sudo apt-get install libbcprov-java 
2

openjdk được gửi bằng ubuntu có thể thiếu nhà cung cấp JCE; tải api bouncycastle crypto từ http://www.bouncycastle.org/ (dự án mã nguồn mở của nó đang triển khai JCE) và đặt nó vào đường dẫn lớp dự án của bạn.

Sau đó, trong lớp học của bạn tham khảo các mẫu mã sau đây: Câu trả lời

 
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; 
} 
Các vấn đề liên quan