10

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") を試すように勧められましたが、これでも同じエラーが発生しました。機能していないのは本当に根本的なことのように思えるので、何か間違ったことをしているに違いないと思います。

4

2 に答える 2

6

ギドの答えは私を正しい方向に向けました。それはただのことです:

sudo apt-get install libbcprov-java
于 2011-01-20T04:28:11.097 に答える
2

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

次に、クラスで次のサンプル コードを参照します。

静的 {
    Security.addProvider( 新しい BouncyCastleProvider() );
}

public SSLSocket getSSLSocket() {

    // キーストアをロード
    キーストア ks = KeyStore.getInstance(keystoreType);
    ks.load(新しい FileInputStream(this.keyStorePath),this.keyStorePass.toCharArray());

    // KeyManager を取得して初期化します
    KeyManagerFactory kmf = KeyManagerFactory.getInstance("sunx509");
    kmf.init(ks, this.keyStorePass.toCharArray());

    // TrustManagerFactory を取得し、KeyStore で初期化します
    TrustManagerFactory tmf = TrustManagerFactory.getInstance("sunx509");
    tmf.init(ks);

    // SSLSocketFactory の作成に役立つ SSLContext を取得します
    SSLContext sslc = SSLContext.getInstance("TLS");
    sslc.init(kmf.getKeyManagers(), null, null);

    // SSLSocketFactory を取得し、SSLSocket を取得します
    SSLSocketFactory sslsf = sslc.getSocketFactory();
    SSLSocket ソケット = (SSLSocket) sslsf.createSocket(ホスト、ポート);
    リターンソケット;
}
于 2011-01-14T11:05:50.260 に答える