SpringBoot 使用RestTemplate 使用https 调用第三方接口 报错the trustAnchors parameter must be non-empty

目录

1、问题现场

2、定位问题

2.1 、表象的迷惑

2.2、问题的本质

3、查找安装jdk路径

4、总结

5、参考文章


1、问题现场

       因需要部署SpringBoot项目到合作厂商的云服务器上,项目因为调用公司内容其他业务的接口上传Scorm文件。为保障能够正常使用,重点验证了调用了第三方接口功能是否正常。

结果发现调用第三方接口出现问题,无法上传Scorm文件。开始定位为第三方服务问题,让服务提供方进行跟踪排查。因为本功能在现有线上是正常的。具体报错如下:

2021-05-08  04:52:35.055 [http-nio-8080-exec-7] 
ERROR com.***.RestTemplateUtils - I/O error on POST request for "https://raas-api.uat.***.com/auth/oauth/token": 
Unexpected error: java.security.InvalidAlgorithmParameterException: 
the trustAnchors parameter must be non-empty; 
nested exception is javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: 
the trustAnchors parameter must be non-empty

2、定位问题

2.1 、表象的迷惑

springboot使用TestRestTemplate单元测试时,提示ResourceAccess I/O error on POST request for "http

发现如果后台的http状态码返回401则会出现这种情况(其他4XX等可能也会)

提供的解决方案:

解决方案,pom.xml加入

 <dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpclient</artifactId>
     <scope>test</scope>
 </dependency>

此种方案加入后还是继续出现前面的问题。此种方案失效。

2.2、问题的本质

  • 本人的java服务是以jar包的形式运行在linux环境中
  • 当程序中使用HTPPS调用第三方接口时候报这个错误
  • 原因是因为安装的jdk中jre的以来有问题、没有ssl支持的相关证书包

最后搜索找到一个十分相似的文章说明此问题的根源在于此(有问题的jdk/lib目录(缺少其他依赖))。

  最后让运维重新安装一个新的jdk。

3、查找安装jdk路径

我安装完jdk太久没用忘记安装路径了,下面记录一下找jdk的安装路径

  1. which java
  2. ls -lrt /usr/bin/java
  3. ls -lrt /etc/alternatives/java

最后就出来了

4、总结

     发现文件一定需要先根据出错的异常进行定位,特别是关键信息,如本问题的关键信息如下:

   nested exception is javax.net.ssl.SSLException: Unexpected error: java.security.InvalidAlgorithmParameterException: 
   the trustAnchors parameter must be non-empty

5、参考文章

springboot使用TestRestTemplate单元测试时,提示ResourceAccess I/O error on POST request for "http

java.security.InvalidAlgorithmParameterException

Centos 如何查看jdk安装路径

猜你喜欢

转载自blog.csdn.net/jianxia801/article/details/116526551