web-dev-qa-db-ja.com

Java NoSuchAlgorithmException-SunJSSE、Sun.security.ssl.SSLContextImpl $ DefaultSSLContext

背景

独自のEclipseプロジェクトでAuthorize.net SDKを使用しています。すべてがうまく機能していました。その後、メインプロジェクトに追加する必要がありました。クラスパスに依存関係を追加し、必要なコードブロックにコピーしました。うまくいったはずです。

問題

簡単に言えば、コードは私がそれを置いた場所では機能しません。ただし、プロジェクトのメインメソッドにそれを直接持ち込むと機能します。

動作しない場所で、デバッガーでコードをステップ実行すると、次の例外が見つかりました。

Java.net.SocketException: Java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: Sun.security.ssl.SSLContextImpl$DefaultSSLContext)

でスロー:

HttpResponse httpResponse = httpClient.execute(httpPost);

注:httpClient = DefaultHttpClient Apacheから

私は今完全に困惑しています。このエラーの原因にならないでください。 Eclipseでは、両方の製品が同じJREをターゲットにしているようです。また、両方ともhttpclient-4.0.1.jarを持っています。問題のあるプロジェクトには、作業中のプロジェクトが{boneCP、guava、mysql_connector_Java、protobuf}していない依存関係もあることに注意してください

問題のコードがプロジェクト内の別の場所で機能するため、余分なjarが原因ではないと思います。

何が間違っているかについてのアイデアは大歓迎です。私はこれをデバッグするために一日を費やしましたが、次にどこに行くべきかわかりません。

ありがとう。

23
jim

さらに検索を行ったところ、エラーが無効なキーストア、パスワードなどの他の問題に関連している可能性があることがわかりました。

その後、ネットワーク接続のSSLをテストするときに2つのVM引数を設定したことを思い出しました。

問題を修正するために、次のVM引数を削除しました。

-Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456

注:このキーストアはもはや存在しないため、おそらく例外が発生します。

31
jim

このエラーについても同様の問題が発生しました。私の場合、キーストアの間違ったパスワードを入力していました。

キーストアのパスワードを入力したものと一致するように変更しました(入力したパスワードを変更したくありませんでした)が、それでも同じエラーが発生しました。

keytool -storepasswd -keystore keystore.jks

問題は、キーストア内のキーのパスワードも変更する必要があることでした。

キーストアを最初に作成したとき、キーはキーストアと同じパスワードで作成されました(このデフォルトオプションを受け入れました)。そのため、キーのパスワードも次のように変更する必要がありました。

keytool -keypasswd  -alias my.alias -keystore keystore.jks
8
RJC

同様の問題がありました。問題はパスワードにありました。キーストアと秘密鍵は異なるパスワードを使用していました。 (KeyStore Explorerが使用されました)

秘密鍵と同じパスワードでキーストアを作成した後、問題は解決しました。

1
amisiuryk