解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题

文章目录

  • 解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题
  • 为什么会出现证书链错误?
  • 常见场景
    • 直连服务器正常,但经过 WAF 出错
    • Windows/Linux 下证书文件说明
    • 引入 WAF 或其他中间层:
  • 解决方法
    • 方法一:单独配置 ChainFile(推荐)
    • 方法二:拼接成 fullchain.crt(通用,博主使用的)
    • 方法三:导入中间证书到 Java(临时方案)
  • 验证配置是否正确
  • 总结


解决 Apache/WAF SSL 证书链不完整导致的 PKIX path building failed 问题

在日常运维或开发中,很多人都会遇到一个棘手的 SSL 错误:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target

这种错误通常出现在 Java 客户端(例如 Spring Boot、OkHttp、HttpClient)调用 HTTPS 接口时,而浏览器访问同一个地址却完全正常。这种情况大概率是 证书链不完整 导致的。


为什么会出现证书链错误?

SSL/TLS 证书通常并不是直接由操作系统信任的根证书颁发的,而是经过一层或多层 中间证书 (Intermediate CA) 过渡:

站点证书 (Leaf, 例如 *.example.com)↓
中间证书 (Intermediate CA)↓
根证书 (Root CA, 操作系统或 Java 自带)

浏览器一般会自动补全缺失的中间证书,所以肉眼访问是正常的。但 Java 客户端更严格,要求服务端必须下发完整的证书链。如果 WAF/Apache 配置中只返回了站点证书,就会导致 PKIX path building failed 错误。


常见场景

直连服务器正常,但经过 WAF 出错

  • 直连服务器:服务器证书配置完整,包括站点证书和中间证书,客户端验证成功。
  • 经过 WAF:只返回了站点证书,缺少中间证书,导致 Java 客户端报错。

Windows/Linux 下证书文件说明

以常见的证书文件为例:

  • example.com.crt → 网站的站点证书 (Leaf)
  • example.com.key → 私钥
  • bundle.crt → 中间证书集合 (Intermediate Chain)

如果只在 Apache/WAF 配置里加载 example.com.crt,客户端就会缺失中间证书。

引入 WAF 或其他中间层:

有些 WAF 或反向代理只下发了服务器证书,却没有完整传递中间证书链。结果就是直连服务器没问题,但通过 WAF 访问时会提示 x509: certificate signed by unknown authority。


解决方法

方法一:单独配置 ChainFile(推荐)

在 Apache 配置中增加:

SSLCertificateFile      /path/to/example.com.crt
SSLCertificateKeyFile   /path/to/example.com.key
SSLCertificateChainFile /path/to/bundle.crt

注意:SSLCertificateChainFile 在 Apache 2.4.8 之后被废弃,但很多 WAF 或旧版本仍然支持。


方法二:拼接成 fullchain.crt(通用,博主使用的)

如果 WAF/CDN/SLB 只允许上传一个证书文件,可以把站点证书和中间证书拼接到一起:

cat example.com.crt bundle.crt > fullchain.crt

Windows PowerShell 下:

Get-Content example.com.crt, bundle.crt | Set-Content fullchain.crt

然后配置:

SSLCertificateFile    /path/to/fullchain.crt
SSLCertificateKeyFile /path/to/example.com.key

这样服务端就会完整下发证书链,Java 客户端验证就不会报错。


方法三:导入中间证书到 Java(临时方案)

如果短期内不能修改 WAF 配置,也可以在 Java 环境中导入中间证书:

keytool -import -alias intermediate-ca \-keystore $JAVA_HOME/jre/lib/security/cacerts \-file bundle.crt

默认密码是 changeit

这种方法不推荐长期使用,因为每台客户端都要单独导入。


验证配置是否正确

配置完成后,可以用 OpenSSL 验证:

openssl s_client -connect example.com:443 -showcerts

如果能看到:

0 s:/CN=*.example.com
1 i:/CN=Intermediate CA
2 i:/CN=Root CA

说明证书链完整,Java 客户端访问就不会报错了。


总结

  • PKIX path building failed 错误本质是 缺少中间证书
  • 直连正常、过 WAF 报错,说明 WAF 配置的证书不完整。
  • 最推荐的做法是 在 WAF/Apache 上配置完整证书链ChainFilefullchain.crt)。
  • 验证方法:使用 openssl s_client -showcerts 查看完整链。

这样就能避免 Java 调用 HTTPS 接口时遇到 SSLHandshakeException。


✅ 小贴士:配置证书时,最好直接使用 CA 提供的 fullchain.crt 文件(已经包含了站点证书 + 中间证书),避免手动拼接出错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921289.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十一、标准化和软件知识产权基础知识

1 标准化基础知识 1.1 基本概念 1.1.1 标准的分类 1.1.1.1 按使用范围分类 国际标准:由国际组织如 ISO、IEC 制定的标准。国家标准:由国家标准化机构制定的标准,如中国的 GB,美国 ANSI。行业标准:由行业主管部门制定的…

计算机毕设选题:基于Python数据挖掘的高考志愿推荐系统

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二…

什么是PCB工艺边?猎板给您分享设计要点

什么是PCB工艺边?猎板给您分享设计要点在PCB设计和制造领域,工艺边是一个看似简单却至关重要的概念,它直接关系到生产流程的顺畅性与最终产品的质量。本文将为您详细解析PCB工艺边的定义、作用、设计要点,并分享猎板PCB在高精度制…

Rustdesk搭建与客户端修改与编译

Rustdesk是一个开源的远程桌面工具,客户端可以自己定制修改编译 这里主要记录一下搭建的过程 服务端搭建 主要是参考了这篇文章,感觉作者分享~ 在 Linux VPS 上创建 RustDesk 服务器 - 知乎 https://zhuanlan.zhihu.com/p/1922729751656765374 这里主要…

数字人系统源码搭建与定制化开发:从技术架构到落地实践

随着元宇宙、直播电商、智能客服等领域的爆发,数字人从概念走向商业化落地,其定制化需求也从 “单一形象展示” 升级为 “多场景交互能力”。本文将从技术底层出发,拆解数字人系统的源码搭建逻辑,结合定制化开发中的核心痛点&…

2025国赛C题创新论文+代码可视化 NIPT 的时点选择与胎儿的异常判定

2025国赛C题创新论文代码可视化 NIPT 的时点选择与胎儿的异常判定基于多通道LED光谱优化的人体节律调节与睡眠质量评估模型摘要无创产前检测(NIPT)通过分析孕妇血浆中胎儿游离DNA来筛查染色体异常,其准确性很大程度上依赖于胎儿Y染色体浓度的…

2021/07 JLPT听力原文 问题一 4番

4番:女の人が新しい商品の紹介をしています。よく頭が痛くなる人は、どの商品を選びますか。女:こちら、新発売の中国茶をご案内します。今回皆様にご紹介いたしますのは、月・星・虹・空のお茶の4種類でございます。さあ、どうぞ召し上がってください。…

爆改YOLOv8 | 即插即用的AKConv让目标检测既轻量又提点

突破固定卷积核的局限,让卷积核形状随目标变化而动态调整 目标检测技术在当今计算机视觉领域扮演着至关重要的角色,而YOLO系列作为其中佼佼者,以其高速和高精度获得了广泛应用。但在实际应用中,传统的卷积操作存在一些固有缺陷**。本文介绍了一种创新性的改进方案——AKCon…

linux inotify 功能详解

内核宏开启机制inotify 功能依赖 Linux 内核宏 CONFIG_INOTIFY_USER CONFIG_INOTIFY_USER=y该宏控制用户态程序能否调用 inotify 相关系统调用,如 inotify_init(),inotify_add_watch() inotifywait 侧重实时响应,适合触发后续操作; inotifywatch 侧重数据统计,适合分析事件…

Docker Registry 实现原理、适用场景、常用操作及搭建详解

一、实现原理 Docker Registry 是基于 无状态服务架构 的镜像存储与分发系统,其核心设计包含以下关键点:存储驱动抽象层 Registry 通过 storagedriver.StorageDriver 接口实现存储解耦,支持多种后端存储: 本地存储:默认…

【LeetCode热题100道笔记】轮转数组

题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7…

【Linux我做主】细说进程等待

Linux进程等待Linux进程等待github地址0. 前言1. 进程等待的必要性1.1 避免僵尸进程与资源泄漏1.2 僵尸进程不可被直接清除1.3 获取子进程的运行结果2. 进程等待的三个问题1. 为什么要有进程等待2. 进程等待是什么3. 怎么实现进程等待3. 僵尸进程演示4. waitwait的手册声明wait…

大语言模型对齐

大语言模型对齐的重要性与目标研究 一、引言 随着大语言模型 (LLM) 能力的不断提升和应用场景的日益广泛,这些模型在为人类社会带来巨大便利的同时,也引发了一系列关于安全性、可靠性和伦理问题的担忧(9)。大语言模型的对齐 (alignment) 作为确保这些强大的 AI 系统与人类价…

数组(4)

int mid min (key - arr[min]) / (arr[max] - arr[min]) * (max - min);17.数组常见算法4 分块查找18.数组常见算法5 冒泡排序笔记小程序错误#include<stdio.h> int main() {/*冒泡排序&#xff1a;1.相邻的元素两两比较&#xff0c;大的放右边&#xff0c;小的放左边2…

STM32 读写备份寄存器

本章节功能利用备份寄存器&#xff08;BKP&#xff09;实现数据的掉电保存&#xff0c;并通过按键和OLED显示屏进行交互。使能电源&#xff08;PWR&#xff09;和备份域&#xff08;BKP&#xff09;的时钟&#xff08; RCC_APB1PeriphClockCmd 函数&#xff09;&#xff0c;并…

RabbitMinQ(模拟实现消息队列项目)02

目录 十.整合数据库和文件数据 创建DiskDataManager类 十一.内存结构设计 创建MeneryDataCenter类: 实现集合操作: 对MemoryDataCenter类功能测试: 十二.整合内存和磁盘数据 创建VirtualHost类: Exchange: MSGQueue: Binding: 创建Router类 对Router类的TOPIC匹配…

Unity Standard Shader 解析(五)之ShadowCaster

一、ShadowCaster // ------------------------------------------------------------------// Shadow rendering passPass {Name "ShadowCaster"Tags { "LightMode" "ShadowCaster" }ZWrite On ZTest LEqualCGPROGRAM#pragma target 3.0// --…

[MRCTF2020]Ez_bypass

BUUCTF在线评测BUUCTF 是一个 CTF 竞赛和训练平台&#xff0c;为各位 CTF 选手提供真实赛题在线复现等服务。https://buuoj.cn/challenges#[MRCTF2020]Ez_bypass启动靶机 有提示F12&#xff0c;那查看一下源码。和页面显示的代码一样的&#xff0c;就是格式更规范而已 include…

C/C++关键字——union

1.介绍union是一种特殊的数据类型&#xff0c;它允许你在同一块内存区域中存储不同的数据类型。它的主要目的是节省内存&#xff0c;尤其是在处理多种可能的数据类型&#xff0c;但一次只使用其中一种的场景。2.特点与 struct&#xff08;结构体&#xff09;不同&#xff0c;结…

2024 arXiv Cost-Efficient Prompt Engineering for Unsupervised Entity Resolution

论文基本信息 题目&#xff1a; Cost-Efficient Prompt Engineering for Unsupervised Entity Resolution 作者&#xff1a; Navapat Nananukul, Khanin Sisaengsuwanchai, Mayank Kejriwal 机构&#xff1a; University of Southern California, Information Sciences Institu…