解決 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
英文地址,請注明出處:http://en.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…