使用 SSL/TLS 憑證時,遇到「無法取得本機頒發者憑證」錯誤可能會令人沮喪,尤其是當它中斷用戶端和伺服器之間的安全通訊時。無論您是嘗試發出 HTTPS 請求、設定 Web 伺服器還是造訪安全網站,此錯誤都可能會中斷流程。在本指南中,我們將探討此問題的原因、常見情境以及解決此問題的逐步解決方案。
「無法取得本地頒發者證書」錯誤是什麼意思?
當系統因根憑證或中間憑證遺失或不受信任而無法驗證 SSL 憑證鏈時,通常會出現「無法取得本機頒發者憑證」錯誤。 SSL 憑證依賴信任鏈,這是一種憑證的層次結構,以受信任的憑證授權單位 (CA) 頒發的根憑證開始。如果此鏈中的任何連結遺失或配置不正確,系統將無法建立安全連接,導致此錯誤。
發生錯誤的常見場景
此錯誤可能在各種環境和情況下出現。讓我們來看看一些最常見的場景:
開發環境(例如 cURL、Node.js、Python)
在開發環境中,開發人員經常使用 cURL、Node.js 或 Python 等工具來發出 HTTPS 請求。當系統缺少必要的根憑證時,這些要求可能會失敗,並顯示「無法取得本機頒發者憑證」錯誤。如果開發環境被隔離或無法存取系統的 CA 證書,通常會發生這種情況。
網路瀏覽器
當嘗試存取 SSL 憑證鏈配置不正確的網站時,Web 瀏覽器可能會顯示此錯誤。這可能是因為該網站缺少中間憑證或正在使用過期的根憑證。作為一項安全措施,瀏覽器會阻止訪問,警告用戶連接不受信任。
伺服器設定(例如 Apache、Nginx)
在生產環境中,如果沒有配置正確的憑證鏈,Apache 和 Nginx 等 Web 伺服器可能會觸發此錯誤。在 Web 伺服器上部署 SSL 憑證時,設定錯誤或遺失中間憑證是常見原因。
錯誤的根本原因
了解此錯誤的根本原因對於解決該錯誤至關重要。以下是您可能會看到此錯誤的一些典型原因:
- 缺少根憑證或中間憑證:伺服器無法提供完整的憑證鏈,導致客戶端不信任連線。
- 憑證鏈配置錯誤:憑證鏈順序不正確或不完整。
- 過期或不受信任的憑證:根憑證可能已過期或被撤銷,導致憑證鏈斷裂。
- 過時的 CA 憑證:本機系統的 CA 憑證可能已過時或缺少受信任的根憑證。
SSL 憑證鏈如何運作
為了更好地理解此錯誤是如何發生的,了解 SSL 憑證鏈的工作原理非常重要。憑證鏈以受信任的憑證授權單位所頒發的根憑證開始。此根證書用於驗證中間證書,進而驗證伺服器的證書。
如果此鏈中的任何證書遺失或不受信任,用戶端將無法驗證伺服器的證書,從而導致「無法取得本機頒發者證書」錯誤。確保正確配置完整的鍊是防止此問題的關鍵。
解決錯誤的故障排除步驟
現在我們了解了導致此錯誤的原因,讓我們看看如何解決它。您可以按照以下步驟操作:
- 驗證憑證鏈
您應該做的第一件事就是驗證 SSL 憑證鏈。您可以使用 OpenSSL 等工具來檢查鏈並查看是否有任何憑證遺失或設定錯誤。例如,使用以下命令可以幫助您檢查憑證鏈:
巴什
複製程式碼
openssl s_client -connect yourdomain.com:443 -showcerts
此命令將顯示伺服器的憑證及其提供的中間憑證。如果鏈條不完整,您就會知道缺少哪個憑證。
- 更新受信任的根證書
如果因為客戶端缺少受信任的根憑證而發生錯誤,更新系統的受信任的根憑證可能會解決問題。例如,在 Linux 上,您可以使用下列命令更新 CA 憑證:
巴什
複製程式碼
sudo update-ca-證書
此命令可確保您的系統擁有最新的一組受信任根證書,從而幫助解決問題。
- 正確設定憑證包
在 Apache 或 Nginx 等伺服器上設定 SSL 時,必須將伺服器憑證與中間憑證和根憑證連接到憑證包中。如果捆綁包不完整或無序,用戶端將無法驗證憑證鏈,從而導致錯誤。確保在設定 Web 伺服器時正確配置憑證鏈。
特定於平台的修復
不同的平台和工具需要特定的解決方案來修復「無法取得本地頒發者憑證」錯誤。以下是常見開發環境的修復:
- 捲曲
在 cURL 中,通常可以透過使用 --cacert 標誌指定正確的 CA 捆綁包來解決此錯誤。您可以下載最新的CA憑證並使用它們,如下所示:
巴什
複製程式碼
捲曲--cacert /path/to/cacert.pem https://yourdomain.com
或者,您可以更新系統上的 CA 證書,cURL 預設將使用該證書。
- Node.js
對於 Node.js,您可能需要更新 NODE_EXTRA_CA_CERTS 環境變數以包含 CA 憑證的路徑。您可以使用以下命令來執行此操作:
巴什
複製程式碼
匯出 NODE_EXTRA_CA_CERTS="/path/to/cacert.pem"
這將允許 Node.js 在發出 HTTPS 請求時使用指定的 CA 捆綁包。
- Python 請求
在Python中,流行的requests庫如果找不到必要的CA證書,可能會觸發此錯誤。安裝 certifi 套件(其中包含最新的受信任根憑證清單)通常可以解決此問題:
巴什
複製程式碼
pip安裝證書
您也可以使用 verify 參數直接在程式碼中指定 CA 套件:
Python
複製程式碼
導入請求
requests.get('https://yourdomain.com', verify='/path/to/cacert.pem')
防止「無法取得本地頒發者證書」錯誤
為了防止將來出現此錯誤,您應該確保使用受信任的根憑證定期更新您的系統。在部署期間自動進行 SSL 憑證驗證並使用工具檢查憑證鏈可以幫助在潛在問題影響生產環境之前識別它們。此外,請務必確保憑證鏈正確配置了所有必要的中間憑證。
結論
「無法取得本機頒發者憑證」錯誤可能會中斷安全連接,但透過了解 SSL 憑證鏈的根本問題並套用有針對性的修復,您可以有效解決此問題。無論您是使用 cURL 和 Node.js 等開發工具還是配置生產伺服器,遵循本指南中概述的故障排除步驟都將幫助您識別並修復根本原因。透過讓系統的 CA 憑證保持最新並在部署期間驗證 SSL 配置,您可以防止將來發生此錯誤。
以上是解決「無法取得本地頒發者證書」錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!