SSLSocket使用jks遇到的问题

情况

尝试SSLSocket的使用,按照网上的文章,使用keytool生成的密钥库来完成对SSLSocket的配置

关于SSLSocket的配置 核心代码大概是这样的


问题

然而这样运行就会报错 java.security.UnrecoverableKeyException: Cannot recover key
简而言之就是密码不一致

分析

网上有很多文章分析说是由于storepass和keypass不一致 将keypass修改成一致就可以了
而且大部分都是复制粘贴的 很不可靠
确实这个方法是可行的 但是很明显处理方式不应该如此 因为这样就失去了设置两个密码的意义

然后代码中很奇怪的一点是KeyStore和TrustKeyStore的load方法里已经传入过相应的密码(storepass)
但KeyStore调用init方法时需要再传入 而TrustKeyStore却不需要

回到问题的原因 是storepass和keypass不一致
而代码中没有传入过keypass却传入了两次storepass 引发了我的猜测

果然原因就是init的时候需要传入的是密钥的密码 即keypass

解决方案

Keystore调用init方法时传入keypass即可

posted on 2019-12-19 17:08  cherryjean  阅读(527)  评论(0)    收藏  举报

导航