2011-01-09 4 views
10

は、UbuntuのインストールのはただのOpenJDKをインストールした:UbuntuのOpenJDKでJava SSLが壊れていますか?私は新鮮なの午前

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")を試すことを勧められましたが、これは同じエラーを投げました。私は何か間違ったことをしているに違いないと思っています。

答えて

6

グイドの答えは正しい方向に私を指摘しました。それは単なる問題です:

sudo apt-get install libbcprov-java 
2

openjdkにはubuntuが付属しており、JCEプロバイダがない可能性があります。 http://www.bouncycastle.org/(JCEを実装しているオープンソースプロジェクト)からbouncycastle crypto apiをダウンロードし、プロジェクトのクラスパスに配置します。

は、その後、あなたのクラスで次のサンプルコードを参照してください。

 
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; 
} 
関連する問題