I/O error on POST request for “...“ PKIX path building failed的解决办法

异常:
项目中需要用RestTemplate调三方接口,url是https开头加密的。postman可以调通,代码提示没有证书,具体如下:

[ERROR][2023-06-25 10:41:16,574][com.peraglobal.restInterface.controller.PLMController]I/O error on POST request for "...":sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException : PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certificat ion path to requested target

PKIX路径构建失败,无法找到到请求目标的有效证书路径

解决办法:
将访问网址域名的有效证书添加到jdk的信任证书中。

一、获取证书:

  1. 可以在浏览器中输入目标网址域名,点击左侧 证书(正常清空证书应该是有效的,我的客户服务器没有联网所以提示无效证书)
    在这里插入图片描述
    正常是这样的
    在这里插入图片描述
    右键证书,找到详细信息,点击复制到文件
    在这里插入图片描述
    证书导出向导下一步:
    在这里插入图片描述
    选择 Base64编码
    在这里插入图片描述
    输入文件名并选择文件的生成路径
    在这里插入图片描述
  2. 如果跟我一样无效的证书,可以找接口的提供方要一个有效的证书

二、将证书添加到jdk里

管理员权限打开cmd,输入命令:
keytool -importcert -file "C:\Users\sdmadmin\Desktop\UAT.crt" -storepass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts"
UAT.crt是刚刚保存的证书路径,-keystore后面是jdk里下的路径
在这里插入图片描述
如果没配置javahome变量可以写cacerts的绝对路径。
在这里插入图片描述
在提示是否信任时输入 是
在这里插入图片描述
如果提示 keytool 错误: java.io.FileNotFoundException: cacerts (拒绝访问。)那么用管理员打开cmd执行一次

三、 重启项目

证书添加完后 重启tomcat,再次调用接口就成功了

关于keytool的命令:

命令说明
-certreq生成证书请求
-changealias更改条目的别名
-delete删除条目
-exportcert导出证书
-genkeypair生成密钥对
-genseckey生成密钥
-gencert根据证书请求生成证书
-importcert导入证书或证书链
-importpass导入口令
-importkeystore从其他密钥库导入一个或所有条目
-keypasswd更改条目的密钥口令
-list列出密钥库中的条目
-printcert打印证书内容
-printcertreq打印证书请求的内容
-printcrl打印 CRL 文件的内容
-storepasswd更改密钥库的存储口令
-help查看全部命令

关于导入证书 keytool -importcert [OPTION]...中的OPTION选项值:

命令说明
-noprompt不提示
-trustcacerts信任来自 cacerts 的证书
-protected通过受保护的机制的口令
-alias 要处理的条目的别名
-file 输入文件名
-keypass 密钥口令
-keystore 密钥库名称
-storepass 密钥库口令
-storetype 密钥库类型
-providername 提供方名称
-providerclass 提供方类名
-providerarg 提供方参数
-providerpath 提供方类路径
-v详细输出

示例

keytool -important -file "C:\Program Files\example.cer" 导入example文件作为证书
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值