3

JAX-RPCクライアントライブラリを使用し、レガシーバージョンのJava(1.4.2)で実行されているアプリケーションがあり、次の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。これは、Java 1.6に対して実行すると正常に機能しますが、残念ながら、これを実行している本番システムは、当面はJava1.4に関連付けられたままです。

また、JAX-RPCコードと、SSLを使用せずに開発システムに接続した場合に実行される認証は正しく機能します。

[編集-追加情報]新しいバージョンのBouncyCastleと競合が発生し、問題が発生していることがわかりました。古い(1.18)バージョンを使用してみましたが、SSLエラーが発生しないようですが、新しいアルゴリズムが必要なため、代わりにアプリケーションからSSLエラーを取得します。

4

2 に答える 2

1

そのため、多くの調査を行った結果、コードの奥深くで BC プロバイダーをプロバイダー番号 1 として挿入していることを最終的に発見しました。

Security.insertProviderAt(prov, 1);

プロバイダーを追加するだけに変更する代わりに、問題を修正しました。

Security.addProvider(prov);
于 2012-02-03T16:27:37.590 に答える
0

javax.crypto.Cipherjce.jarと呼ばれる( rt.jarとは別の)JARファイルにあります。クラスローダーがこのファイルを見つけられないか、本番アプリサーバーのこのファイルに読み取り権限が設定されていない可能性があります。

于 2011-12-20T16:00:30.017 に答える