原因:java.security.UnrecoverableKeyException:キーを回復できません


84

ABCC_client.storeという名前のjksキーストアが提供されています。このキーストアをcacertsにインポートして接続しようとすると、「そのようなアルゴリズムエラーはありません」と表示されます。PFAスタックトレース

    Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class:   com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
    at java.security.Provider$Service.newInstance(Provider.java:1245)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:220)
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:147)
    at javax.net.ssl.SSLContext.getInstance(SSLContext.java:125)
    at javax.net.ssl.SSLContext.getDefault(SSLContext.java:68)
    at javax.net.ssl.SSLSocketFactory.getDefault(SSLSocketFactory.java:102)
    at org.apache.axis.components.net.JSSESocketFactory.initFactory(JSSESocketFactory.java:61)
    at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:79)
    ... 32 more
Caused by: java.security.UnrecoverableKeyException: Cannot recover key
    at sun.security.provider.KeyProtector.recover(KeyProtector.java:311)
    at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121)
    at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38)
    at java.security.KeyStore.getKey(KeyStore.java:763)
    at com.sun.net.ssl.internal.ssl.SunX509KeyManagerImpl.<init>(SunX509KeyManagerImpl.java:113)
    at com.sun.net.ssl.internal.ssl.KeyManagerFactoryImpl$SunX509.engineInit(KeyManagerFactoryImpl.java:48)
    at javax.net.ssl.KeyManagerFactory.init(KeyManagerFactory.java:239)
    at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.getDefaultKeyManager(DefaultSSLContextImpl.java:170)
    at com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl.<init>(DefaultSSLContextImpl.java:40)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:355)
    at java.lang.Class.newInstance(Class.java:308)
    at java.security.Provider$Service.newInstance(Provider.java:1221)
    ... 39 more

しかし、このキーストアを個別に使用する場合、つまりcacertsに追加せずに使用すると、機能します。

いくつかのグーグルでhttp://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/にアクセスしました。これは、パスワードが異なる可能性があることを示しています。キーとキーストア。


可能であれば何が呼ばれるかを確認するためのコードはありますか?
ブルーノ

私はcode..AxisFaultにfaultCode内からWebサービスメソッドを呼び出すようにしようとしていた:{ schemas.xmlsoap.org/soap/envelope } Server.userException faultSubcode:のfaultString:java.net.SocketExceptionが:java.security.NoSuchAlgorithmException:エラー構築実装(アルゴリズム:デフォルト、プロバイダー:SunJSSE、クラス:com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
Mrinal Bhattacharjee 2013

2
ここで重複する可能性があるのは、回答者と同様の質問です。
icrovett 2013

いいえ私の問題は、そのキーストアを使用するようにシステムプロパティを設定すると、キーストアが機能することです。しかし、そのキーストアをjvmのデフォルト、つまりcacertsにロードしても、機能しません。それは悪い証明書を言う...
Mrinal Bhattacharjee

回答:


109

Tomcat 6以前を使用している場合は、キーストアのパスワードとキーのパスワードが同じであることを確認してください。Tomcat 7以降を使用している場合は、それらが同じであること、またはキーパスワードがserver.xmlファイルで指定されていることを確認してください。


10
これは本当です。参照tomcat.apache.org/tomcat-6.0-doc/…–
Atharva

2
関連する引用:最後に、キーパスワードの入力を求められます。これは、(同じキーストアファイルに保存されている他の証明書とは対照的に)この証明書専用のパスワードです。あなたはしなければならないキーストアのパスワード自体に使用されたとして、ここで同じパスワードを使用します。これはTomcat実装の制限です。(現在、keytoolプロンプトは、ENTERキーを押すと自動的にこれを行うことを示しています。)
キャプテンマン

JMeter(https)cozJavaキーストアとキーパスワードが異なる場合にこの問題が発生しました。参照stackoverflow.com/questions/2889238/…。問題を解決するためにキーパスワードを変更します。大きな助け!ありがとう。
リシ2017年

@CaptainManはTomcat6でのみ当てはまりますが、Tomcat7からはそうではありません
Andrea Ligios 2018年

2
@AndreaLigiosの良い点、関連する引用:最後に、キーパスワードの入力を求められます。これは、(同じキーストアファイルに保存されている他の証明書とは対照的に)この証明書専用のパスワードです。keytoolプロンプトがEnterキー押すと、自動的にキーストアとしてキーに同じパスワードを使用していることを教えてくれます。同じパスワードを使用することも、カスタムパスワードを選択することもできます。キーストアパスワードとは異なるパスワードを選択する場合は、server.xml構成ファイルでカスタムパスワードも指定する必要があります。
キャプテンマン

73

app / configで定義されている秘密鍵のパスワードが正しくありません。まず、次のように別のパスワードに変更して、秘密鍵のパスワードを確認してみてください。

keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password

上記の例では、パスワードをpasswordからchangeitに変更します。秘密鍵のパスワードがpasswordの場合、このコマンドは成功します。


2
私は質問に関連してこの答えを使用しませんでしたが。キーストアファイル、ストアパスワード、エイリアス/キー、およびキーパスワードの検証に役立ちました。
ラス2014

1
このコマンドを実行した後、キーストアのパスワードを変更することに注意してください。パスワードを元のパスワードに戻す必要があります。
gersonZaragocin 2016

実際には、ちょうど指定-keypasswd -keystore storefile -alias somealiasして、プロンプトに他のすべてを入力するだけで十分です。
アンドレイレジェントフ2016年

このコードを実行すると、次のエラーが発生します-"keytool error: java.security.UnrecoverableKeyException: Cannot recover key"エイリアスキーのパスワードを確認したり、古いパスワードを知らずに変更したりする方法はありますか?
Kavin Raju S 2018

10

持っていないためにCannot recover key、例外を、私は自分のアプリケーションを実行していたのJavaのインストールにJava Cryptography Extension(JCE)無制限強度の管轄ポリシーファイルを適用する必要がありました。これらのファイルのバージョン8はここにあります。または、最新バージョンがこのページにリストされているはずです。ダウンロードには、ポリシーファイルの適用方法を説明するファイルが含まれています。


JDK 8u151以降、ポリシーファイルを追加する必要はありません。代わりに、JCE管轄ポリシーファイルは、と呼ばれるセキュリティプロパティによって制御されcrypto.policyます。これをunlimitedwithに設定すると、JDKで無制限の暗号化を使用できるようになります。上記の状態にリンクされているリリースノートとして、ファイルによって、Security.setProperty()またはjava.securityファイルを介して設定できます。java.securityファイルには、追加することによって追加することができ-Djava.security.properties=my_security.properties詳述するようにプログラムを起動するコマンドにここに


JDK 8u161以降、無制限の暗号化がデフォルトで有効になっています。


3
ポリシーファイルjarがインストールされているにもかかわらず、このエラーが表示されます。
アダム

@Adam私の解決策は特定のケースのためのものであり、あなたが経験しているものとは異なる場合があります。ただし、JDK8u151で発生した変更を反映するように更新を追加しました。
WhiteKnight

5

64ビットのOpenSSLバージョンを使用してビルドされたキーストアにキーをインポートしたときに同じエラーが発生しました。同じ手順に従って、32ビットのOpenSSLバージョンを使用して構築されたキーストアにキーをインポートすると、すべてうまくいきました。


3
上記のエラーの根本的な原因はjava.security.UnrecoverableKeyExceptionでした:キーを回復できません。その理由は、前述のように偽のパスワードである可能性がありますが、64ビットのOpenSSL実装でビルドされたキーストアでもあります。だから私は私の答えを別の可能な解決策と考えています。それは同じエラー状況で私を助けたので、私はここで解決策を提供しました。
ヘイミ2015

opensslはJavaキーストアファイルを作成しません。これを明確にしていただけますか?
2016年

あなたが答えてくれてありがとう。OpenESB3.05からhttpswebservicesを呼び出すときに、同じ問題に直面します。私はあなたの指示に従うとOpenSSの32ビット実装で再びJKSファイルを生成し、それが正常に動作します
マルティPàmiesソラ

2

以下のコマンドを実行して、使用しているパスワードが正しいかどうかを確認してください

keytool -keypasswd -new temp123 -keystore awsdemo-keystore.jks -storepass temp123 -alias movie-service -keypass changeit

以下のエラーが発生した場合は、パスワードが間違っています

keytool error: java.security.UnrecoverableKeyException: Cannot recover key
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.