Java调用HTTPS可能出现如下错误:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。
测试验证
测试是否会出现本问题可以使用如下命令:
java SSLPoke www.xmcic.cn 443
SSLPoke.class文件可以在本站下载。下载链接
具体解决思路有2种:
1、修改Java代码,信任所有证书。
因为本次不适合修改代码,此办法跳过。
2、将证书添加到运行服务器运行环境的信任列表。
2.1、确定工具可以使用和cacerts文件位置
- Java 使用了一种叫 keystore 的文件来存储证书 (默认是位于 $JAVA_HOME/lib/security/cacerts ) 。如果没有请全盘查找一下,我实际情况是位于:$JAVA_HOME/jre/lib/security/cacerts
- 该keystore文件使用 keytool 工具去管理 (该工具默认位于 $JAVA_HOME/bin/keytool )。
注意:keystore文件受密码保护。生成新的keystore文件时,会要求你输入一个新密码;而当访问一个已有的 keystore 文件时,会要求你验证密码。
一般java cacerts的默认密码为
changeit
通过下面的命令查看现有证书并验证密码。
keytool -list -keystore $JAVA_HOME/lib/security/cacerts
2.2、得到目标crt证书
Windows环境命令
使用浏览器打开网站,查看证书“详细信息”点“导出
2.3、导入证书
使用下列命令导入证书
keytool -import -alias <证书别名> -keystore $JAVA_HOME/jre/lib/security/cacerts -file xmcic.cn.crt
如果需要密码,请尝试默认密码
changeit
如果别名已经存在,使用如下命令删除后重新添加
keytool -delete -alias <证书别名> -keystore $JAVA_HOME/jre/lib/security/cacerts
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通