首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >原因: java.security.UnrecoverableKeyException:无法恢复密钥

原因: java.security.UnrecoverableKeyException:无法恢复密钥
EN

Stack Overflow用户
提问于 2013-04-12 17:27:04
回答 6查看 212.6K关注 0票数 96

我得到了一个名为ABCC_client.store的jks密钥库。当我将这个密钥库导入cacerts并尝试连接它时,它会显示没有这样的算法错误。PFA堆栈跟踪

代码语言:javascript
复制
    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

但是如果我独立使用这个keystore,也就是不把它添加到cacerts中,它就能工作。

通过一些谷歌搜索,我找到了http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/,它说密钥和密钥库的密码可能不同。

EN

回答 6

Stack Overflow用户

发布于 2014-06-01 18:40:49

如果使用Tomcat6和更早版本,请确保密钥库密码和密钥密码相同。如果使用Tomcat7和更高版本,请确保它们是相同的,或者在server.xml文件中指定了密钥密码。

票数 119
EN

Stack Overflow用户

发布于 2013-10-23 11:15:33

你的应用/配置中定义的私钥密码不正确。首先尝试通过更改为其他密码来验证私钥密码,如下所示:

代码语言:javascript
复制
keytool -keypasswd -new changeit -keystore cacerts -storepass changeit -alias someapp -keypass password

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

票数 76
EN

Stack Overflow用户

发布于 2016-02-10 21:55:57

为了不出现Cannot recover key异常,我必须将Java加密扩展(JCE)无限强度权限策略文件应用于运行我的应用程序的Java安装。这些文件的版本8可以在here上找到,或者应该在this page上列出最新版本。该下载包括一个说明如何应用策略文件的文件。

由于使用了JDK 8u151,因此不需要添加策略文件。相反,JCE权限策略文件由一个名为crypto.policy的安全属性控制。将其设置为unlimited,允许JDK使用无限制的加密。由于发行说明链接到上述状态,因此可以通过Security.setProperty()或通过java.security文件进行设置。还可以通过将-Djava.security.properties=my_security.properties作为详细的here添加到命令来启动程序,从而附加到java.security文件。

因为默认情况下启用了JDK 8u161无限加密。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15967650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档