qq_33248357 2023-12-13 14:26 采纳率: 50%
浏览 10
已结题

应用调用企微接口报证书问题PKIX path building failed?

PKIX path building failed 这个报错遇到很多次了,是自建应用在调用企业微信oauth2单点登录时,调用https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token= 获取用户信息时报错。每次都是通过 InstallCert 生成 jssecacerts 证书,放到jdk/jre/lib/security下 就正常了,但过段时间依旧报这个错,又重新生成并且替换。
不知道这个问题的根本原因在哪里,有没有什么方法从根本上解决呢

  • 写回答

11条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-12-13 14:26
    关注

    引自强大而免费的微信小程序:皆我百晓生

    1. 问题根源分析

    PKIX(Public Key Infrastructure X.509)是一种公钥基础设施标准,用于验证数字证书的有效性和信任链的建立。当你的应用调用企业微信接口发生PKIX path building failed错误时,是因为你的Java程序在与企业微信建立HTTPS连接时,无法找到合适的证书来验证服务端的数字证书链。

    每次通过InstallCert生成jssecacerts证书并替换是一个临时解决方案,但这个问题的根本原因可能是你的Java环境缺少了它所需的根证书或中间证书。因此,你需要从根本上解决这个问题,而不是反复替换证书。

    2. 解决方法

    下面是一些可能的解决方法,你可以尝试一下:

    2.1 导入根证书和中间证书
    你可以手动导入企业微信的根证书和中间证书到你的Java运行环境中。具体步骤如下:

    1. 打开浏览器,访问企业微信的网页(例如https://qyapi.weixin.qq.com)。
    2. 在浏览器的地址栏中,点击锁形图标,查看证书详情。
    3. 导出根证书和中间证书为.crt文件。
    4. 使用keytool命令将证书导入到Java的信任库中,示例命令如下:
      keytool -import -alias enterprise_wechat_root -keystore [JAVA_HOME]/jre/lib/security/cacerts -file path/to/enterprise_wechat_root.crt
      keytool -import -alias enterprise_wechat_intermediate -keystore [JAVA_HOME]/jre/lib/security/cacerts -file path/to/enterprise_wechat_intermediate.crt
      
      (其中[JAVA_HOME]是你的Java安装路径,path/to是根证书和中间证书的存放路径)
    5. 输入changeit作为默认密码,如果没有修改过的话。
    6. 在询问是否信任证书时,输入yes确认。

    2.2 更新Java运行环境的根证书库
    Java运行环境有一个默认的根证书库,保存了一些可信任的根证书和中间证书。你可以更新这个库来获取最新的根证书和中间证书。具体步骤如下:

    1. 在你的Java安装路径下,找到jre/lib/security目录。
    2. 下载OpenJDK证书源码或者从其他可靠的来源获取最新的cacerts文件。
    3. 备份原来的cacerts文件,并将下载的文件替换到jre/lib/security目录下。

    3. 补充说明

    • 如果你在使用某个Java客户端库,可以尝试查阅官方文档或社区文档,看是否有关于PKIX path building failed的解决方案。有些库可能有自己特定的配置选项。
    • 如果你的应用是运行在某个应用服务器(例如Tomcat)中,你可能需要检查服务器的配置,确保它正确地引用了Java运行环境的证书库。
    • 如果你的应用运行在内网环境下,可能是无法访问外网来获取证书链。你可以考虑使用一些工具(如Fiddler)在外网环境中获取企业微信的证书链,并手动导入到Java运行环境中。

    参考资料:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(10条)

报告相同问题?

问题事件

  • 系统已结题 12月23日
  • 已采纳回答 12月15日
  • 创建了问题 12月13日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上