で私たちは、JAX-RPCのクライアントライブラリを使用するとJavaのレガシーバージョン(1.4.2)上で実行されていると、次のSSLエラーを受信しているアプリケーションがあります。JavaのNoClassDefFoundErrorがSSL接続
java.lang.NoClassDefFoundError
javax.crypto.Cipher.a(DashoA6275)
javax.crypto.Cipher.getInstance(DashoA6275)
com.sun.net.ssl.internal.ssl.SunJSSE_i.a(DashoA12275)
com.sun.net.ssl.internal.ssl.CipherBox$JCECipherBox.<init>(DashoA12275)
com.sun.net.ssl.internal.ssl.CipherRC4.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_h.a(DashoA12275)
com.sun.net.ssl.internal.ssl.CipherSuite$BulkCipher.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_ax.c(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.f(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_az.j(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_az.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SunJSSE_ax.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.a(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.j(DashoA12275)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(DashoA12275)
sun.net.www.protocol.https.HttpsClient.afterConnect(DashoA12275)
sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(DashoA12275)
sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:569)
sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(DashoA12275)
com.sun.xml.rpc.client.http.HttpClientTransport.writeMessageToConnection(HttpClientTransport.java:278)
com.sun.xml.rpc.client.http.HttpClientTransport.invoke(HttpClientTransport.java:64)
com.sun.xml.rpc.client.StreamingSender._send(StreamingSender.java:69)
[ ... trace continues into internal application code ... ]
これを以前は私たちのために働いていました。クライアントライブラリの唯一の変更は、使用された認証プロトコルに関連するものであり、BouncyCastleの最新ビルドへの更新が必要でした。これらの変更はすべてSSLプロトコルよりも高いレベルであり、このエラーはBouncyCastleに関係していないようです。
これまでにこのようなエラーが発生したことがありましたら、ぜひご意見やご提案をお持ちですか? cacerts
に証明書を追加しようとしました。残念ながら、これを実行している本稼動システムはJava1.4にまだ当てられていますが、これはJava 1.6に対して実行するとうまくいきます。
また、SSLを使用しない開発システムに接続すると、JAX-RPCコードと認証が正しく機能します。
[編集 - 追加情報]問題の原因となるBouncyCastleの新しいバージョンでいくつかの競合が発生していることがわかりました。私は古代(1.18)のバージョンを使用しようとしましたが、私はSSLエラーを取得しないようですが、より新しいアルゴリズムが必要なため、アプリケーションから1つを取得します。
あなたはJREセキュリティポリシーファイルを見てすることをお勧めします(%JAVA_HOME%/ JRE/libに/セキュリティ/ java.securityおよびjava.policyの)クラスは、Java 1.4で使用されて参照するには...おそらく、SSL証明書はJava 1.4で利用できなかった新しいCypherを使用しているかもしれません。Javaが使用しているクラスの違いを見れば、それを見つけることができます。 – Renato
Java 1.4用のBouncyCastleライブラリを使用していることを確認しましたか(これは、同じバージョンのライブラリ自体に対してさまざまなビルドで提供されています)。 – Bruno
はい、1.4のライブラリがあります。 – Michael