簡體   English   中英

Ubuntu上的OpenJDK是否破壞了Java SSL?

[英]Is Java SSL broken in OpenJDK on Ubuntu?

我在剛剛安裝OpenJDK的Ubuntu的全新安裝中:

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

不知道這是否相關,但是我正在VMWare Fusion中運行它。

下一行:

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

throws the following exception:

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

我和我的同事已經在幾台計算機上嘗試了這一點,所有這些都是Ubuntu的全新安裝,並且一直在使用。 建議我嘗試getInstance(“ TLSv1”),但這會引發相同的錯誤。 似乎有些根本不起作用的東西,所以我認為我們一定做錯了。

guido的回答為我指明了正確的方向。 這只是一個問題:

sudo apt-get install libbcprov-java

ubuntu附帶的openjdk可能缺少JCE提供程序; http://www.bouncycastle.org/下載bouncycastle crypto api(這是一個實現JCE的開源項目),並將其放在您的項目類路徑中。

然后在您的班級中,參考以下示例代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM