引起:java.security.UnrecoverableKeyException:无法恢复密钥

我提供了一个名为ABCC_client.store的jks密钥库。 当我将这个密钥库导入cacerts并尝试连接时,表示没有这样的algorithm错误。 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 

但是,如果我独立使用这个密钥库,即不join它的cacerts它的作品。

一些谷歌search导致我http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/其中说,密码可能会有所不同密钥和密钥库。

确保KeyStore密码和Keypassword相同。

您的应用/configuration中定义的私钥密码不正确。 首先尝试通过更改为另一个validation私钥密码,如下所示:

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

以上示例将密码从密码更改为changeit。 如果私钥密码是密码,则此命令将成功。

当我们将密钥导入使用64位OpenSSL版本构build的密钥库时,我遇到了同样的错误。 当我们按照相同的步骤将密钥导入使用32位OpenSSL版本构build的密钥库时,一切都很顺利。

为了不具有Cannot recover keyexception,我必须将Java密码学扩展(JCE)无限强度pipe辖权策略文件应用到正在运行我的应用程序的Java的安装中。 这些文件的版本8可以在这里find或最新版本应该在此页面上列出。 下载内容包括解释如何应用策略文件的文件。