【转载】参考文章:
https://blog.csdn.net/gabriel576282253/article/details/81531746
https://blog.csdn.net/wangjunjun2008/article/details/37662851
https://blog.csdn.net/u011042133/article/details/51671801
https://blog.csdn.net/frankcheng5143/article/details/52164939/
起因:
运行程序时出现报错:
unable to find valid certification path to requested target
意思就是服务器提供的证书不被我们客户端信任,此时需要将安全证书导入到java的cacerts证书库。
1、下载证书
去你程序要访问的网站,点击那个锁按钮,并点击查看详情(chrome浏览器)
点击View certificate
点击详细信息
复制到文件
下一步
选择格式
生成的名称,最后保存
这里我保存在的D盘根目录下叫abc.cer
2、将证书导入java的cacerts证书库
切换到 jre 的/lib/security/
下
执行如下命令
keytool -import -alias abc -keystore cacerts -file D://abc.cer
其中:
-alias
指定别名(推荐和证书同名)
-keystore
指定存储文件(此处固定)
-file
指定证书文件全路径(证书文件所在的目录)
注意:当切换到 cacerts 文件所在的目录时,才可指定 -keystore cacerts
, 否则应该指定全路径;
此时命令行会提示你输入cacerts证书库的密码,敲入changeit即可,这是java中cacerts证书库的默认密码,当然也可自行修改。
库密钥口令输入:changeit
将会看到如下的信息
是否信任:Y
证书导入成功
查看证书,密钥仍然是changeit
keytool -list -keystore cacerts -alias vbooking
至此证书导入成功。
3、查看证书
可使用如下命令查看证书信息:
keytool -list -keystore cacerts -alias vbooking
结果如下:
4、注意事项
4.1 导入错误提示
导入证书过程中,可能会遇到一个问题,如下所示
keytool 错误: java.io.FileNotFoundException: cacerts (拒绝访问)
出现这个问题的主要原因是
WIN7下的C:\Program Files以及C:\Program Files(x86)都是只有管理员权限才能访问的目录,所有写、修改操作都会遭遇”拒绝访问”,解决方案有两种:
1、将JDK安装在D盘
2、使用管理员权限打开命令行
4.2 更新证书
更新证书时,先删除原来的证书,然后导入新的证书
cd ${JAVA_HOME}/jre/lib/security
keytool -list -keystore cacerts
keytool -delete -alias akazam_email -keystore cacerts
keytool -import -alias akazam_email -file akazam_email.cer -keystore cacerts -trustcacerts
重启服务器即可。