[英]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.