https正在成为主流,http估计在不久的将来会被彻底放弃……
一个Java程序需要访问一个https的网站的时候,可能需要涉及证书的安装,卸载等操作。
一、证书的下载
打开浏览器输入https://的网站,如果没有相关证书,可以根据提示从浏览器中下载下来,一般保存为*.cer文件。
二、证书的安装
1. 将步骤一的*.cer文件拷贝到"%JAVA_HOME%jrelibsecuritycacerts"路径下 2. keytool -import -keystore cacerts -storepass changeit -keypass changeit -alias my-cas -file *.cer证书的绝对位置
三、证书的查看
keytool -list -v -alias my-cas -keystore "%JAVA_HOME%jrelibsecuritycacerts" -storepass changeit -keypass changeit
四、证书的删除
keytool -delete -v -alias my-cas -keystore "%JAVA_HOME%jrelibsecuritycacerts" -storepass changeit -keypass changeit
五、一个错误
发布并运行一个WEB项目,登录SSL系统时得到这个错误信息:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
六、解决过程及结论
1. 所有搜索到的结论都是【没有正确的安装证书】。
2. 可是我用步骤三显示并证明了已经正确的安装了证书。
3. 灵光一现,会不会是JDK不兼容?已经确认证书由JDK1.7生成,我当前的环境是JDK1.8。
4. 安装了一个JDK1.7,然后发现Eclipse Neon(4.6.2)不支持JDK1.7。
5. 下载了Eclipse Mars(4.5.2),项目运行成功了!
6. 似乎得到结论?JDK版本不一致导致的问题?
7. 继续测试,将JDK还原成1.8版本。
8. 通过Eclipse Mars运行WEB项目,还是成功的!
9. JDK1.8表示这个锅我不背……
10. 重新使用Eclipse Neon运行,还是相同的错误信息。
11. Eclipse Neon的问题???
12. 最后一击,用Neon重新发布项目,通过Eclipse Server运行,报错依旧。同一个项目,直接手动启动tomcat,成功运行!
13. 结论:
1 此次测试环境证书安装是正确的。 2 JDK1.7和JDK1.8关于SSL证书这块是兼容的。 3 Eclipse Neon(4.6.2)在SSL证书这块是有BUG的。
如果万一遇到和我用同样版本开发的朋友遇到同样的问题,不要一味的纠结自己的证书,换个IDE试一下吧。