Ssl

無法獲取 cURL 或 wget 來驗證某些 SSL 證書

  • April 12, 2017

我注意到我們使用 cURL 的連結檢查器在驗證 SSL 證書時越來越失敗。我正試圖弄清楚這一點。

例如, https: //www.bgetem.de/ 在我的 Windows 7 機器上的每個瀏覽器(IE 11、Firefox、Opera、Chrome)上都可以正常打開,但我的 CentOS 6 和 Ubuntu 16.04 上的 cURL(和 wget)不能驗證證書。

這是 CentOS 的 cURL 的詳細輸出(版本curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2

* About to connect() to www.bgetem.de port 443 (#0)
*   Trying 193.104.3.166... connected
* Connected to www.bgetem.de (193.104.3.166) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
 CApath: none
* Peer's certificate issuer is not recognized: 'CN=COMODO RSA Domain Validation Secure Server CA,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB'
* NSS error -8179
* Closing connection #0
* Peer certificate cannot be authenticated with known CA certificates

和 Ubuntu(版本curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3):

* found 173 certificates in /etc/ssl/certs/ca-certificates.crt
* found 695 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_GCM_SHA384
* server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
* Closing connection 0
curl: (60) server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

知道問題是什麼以及如何解決嗎?

正如錯誤消息已經解釋的那樣:伺服器證書無法使用 CAfile 中的已知 CA 證書進行身份驗證:(/etc/pki/tls/certs/ca-bundle.crt因為伺服器證書是由您的系統未知的 CA 頒發的)。

出現此類消息的兩個相當常見的原因:

  • 證書實際上是由未知 CA(例如內部 CA)簽署的。
  • 該證書使用來自知名 CA 之一的中間 CA 證書進行簽名,並且遠端伺服器配置錯誤,因為它不包含該中間 CA 證書作為其響應的 CA 鏈。

感謝您提供域名:這使我們能夠測試 SSL 伺服器並確認:CA 鏈不完整:

在此處輸入圖像描述

作為該伺服器的管理員,您可以/應該修復鏈文件以防止認證路徑中的那些“額外下載”部分。

如果您不是該伺服器的管理員並且想要修復該客戶端:您自己下載該中間證書並將其添加到本地信任庫

引用自:https://serverfault.com/questions/844071