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) 收藏 举报
浙公网安备 33010602011771号