https证书问题unable to find valid certification path to...

遇到一个及其恶心的问题,如标题所示,在网上找了很久,有两种解决方案:

1.跳过认证

多数人认为这种方案不适用于生产环境,故不讨论。

 

2.在Java环境中添加这个证书。

具体分成两步,下载和导入。

 

2-1.下载

通过浏览器获取一个.der文件(不要随意用别人给的)

 

2-2.导入

导入分成两种方案,默认路径和指定路径。

(1)默认路径导入

进入到/jdk/jre/lib/security 目录

keytool -import -alias cacerts[随便起名] -file abc.der[你导出的证书] -keystore cacerts -storepass changeit

校验是否导入成功:keytool -list -v -keystore cacerts -alias cacerts[和导入时,起的别名一致]-storepass changeit

删除:keytool -delete -keystore cacerts -alias cacerts[和导入时,起的别名一致] -storepass changeit

此时Java项目中就可以直接使用https协议了。

这个方案里面藏着一个约定"Java应用会默认找到 /jdk/jre/lib/security/cacerts"文件

 

(2)指定路径导入(如果你想把证书另存到其他文件

进入到/jdk/jre/lib/security 目录

keytool -import -alias cacerts[随便起名] -file abc.der[你导出的证书] -keystore abc.jks[随便起名] -storepass changeit

校验是否导入成功:keytool -list -v -keystore  abc.jks[和生成时的文件一致] -alias cacerts[和导入时,起的别名一致] -storepass changeit

删除:keytool -delete -keystore abc.jks[和生成时的文件一致] -alias cacerts[和导入时,起的别名一致] -storepass changeit

(注意,删除的是当前目录下abc.jks文件中的别名为cacerts的证书,如果你把这个文件拷贝到其它目录了,就删除不到了,拷贝的文件也不会受到影响)

此时,就需要指定证书地址了(证书名变了,路径也就变了,不可用默认约定了):

Properties props = System.getProperties();

props.put("javax.net.ssl.trustStore","C:\\Program Filles\\Java\\jdk1.8.0_11\\jre\\lib\\security\\abc.jks");//C:\\Program Filles\\Java\\jdk1.8.0_11\\jre\\lib\\security\\abc.jks是证书路径

props.put("javax.net.ssl.trustStorePassword","changeit");

System.setProperties(props);

 


参考文档:https://www.cnblogs.com/zoro-zero/p/11607674.html

 


版权声明:本文为qq_28019485原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。