java.security不能修改_关于ssl:引起:java.security.UnrecoverableKeyException:无法恢复密钥...

我得到一个名为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中,它就会工作。

有人在google上找到了http://joewlarson.com/blog/2009/03/25/java-ssl-use-the-same-password-for-keystore-and-key/,这说明密钥和密钥库的密码可能不同。

如果可能的话,需要一点代码来查看调用了什么?

我试图从代码中调用Web服务方法..axisfault faultcode:schemas.xmlsoap.org/soap/envelope server.userexception faultsubcode:faultstring:java.net.socketexception:java.security.nosuchalgorithmexception:构造实现时出错(算法:默认,提供程序:sunjsse,类:com.sun.net.ssl.internal.ssl.defaultsslcontextimpl)

这里有一个与Asnwer相似的问题。

不,我的问题是,如果我们将系统属性设置为使用该密钥库,那么该密钥库将正常工作。但是,如果我们将这个密钥库加载到JVM的默认值(即cacerts)中,它不会出错。上面写着坏证书……

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

这是真的。参考tomcat.apache.org/tomcat-6.0-doc/&hellip;

相关引述:最后,系统会提示您输入密钥密码,即此证书的专用密码(与存储在同一密钥库文件中的任何其他证书不同)。您必须在此处使用与密钥库密码本身相同的密码。这是对Tomcat实现的限制。(目前,keytool提示会告诉您,按Enter键可以自动完成此操作。)

我有这个问题,WJME(HTTPS)COZ Java密钥库和密钥密码是不同的。请参阅stackoverflow.com/questions/2889238/&hellip;。更改密钥密码以解决此问题。很好的帮助!谢谢。

@船长只有在Tomcat6才是这样,从Tomcat7就不是。

@Andrealigios good point,相关引述:最后,系统将提示您输入密钥密码,即此证书的特定密码(与存储在同一密钥库文件中的任何其他证书不同)。keytool提示将告诉您,按Enter键将自动使用与密钥库相同的密钥密码。您可以使用相同的密码或选择自定义密码。如果为密钥库密码选择不同的密码,则还需要在server.xml配置文件中指定自定义密码。

仍然是Tomcat 8的一个问题

应用程序/配置中定义的私钥密码不正确。首先尝试通过如下更改另一个来验证私钥密码:

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

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

但我没有用这个答案来回答这个问题。它有助于验证密钥存储文件、存储密码、别名/密钥和密钥密码。

请记住,执行此命令后,您将更改密钥库密码。您必须将密码设置回原来的密码。

实际上,只需指定-keypasswd -keystore storefile -alias somealias,并在提示中输入其他内容就足够了。

运行此代码时,我得到以下错误-"keytool error: java.security.UnrecoverableKeyException: Cannot recover key"是否有任何方法可以检查我的别名密钥密码或在不知道旧密码的情况下更改它?

只是我需要的。非常感谢!

为了不具有EDCOX1×1异常,我必须将Java加密扩展(JCE)无限强度管辖权策略文件应用到正在运行我的应用程序的Java安装中。这些文件的版本8可以在这里找到,或者最新版本应该列在这个页面上。下载包含一个解释如何应用策略文件的文件。

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

由于默认情况下启用JDK 8U161无限加密。

尽管安装了策略文件JAR,但我仍然看到此错误。

@亚当,我的解决方案是针对一个特定的案例,这可能与你正在经历的不同。不过,我添加了一个更新来反映JDK8U151中发生的更改。

当我们将一个密钥导入使用64位OpenSSL版本构建的密钥库时,我也遇到了同样的错误。当我们按照相同的过程将密钥导入使用32位OpenSSL版本构建的密钥库时,一切都正常。

上述错误的根本原因是java.security.unrecoverable keyException:无法恢复密钥。原因可能是上面提到的错误密码,也可能是使用64位OpenSSL实现的密钥库构建。所以我认为我的答案是另一个可能的解决方案。它在相同的错误情况下帮助了我,所以我在这里提供了解决方案。

OpenSSL不创建Java密钥存储文件。你能解释一下吗?

谢谢你的回答。我在调用HTTPSWebServices FormOpenESB3.05时也面临同样的问题。我按照您的指示使用32位的OpenSS实现再次生成jks文件,它工作正常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值