curl 表示有效證書已過期
我有一個託管在伺服器上的 gitlab 社區版,當在此伺服器上使用 curl 獲取此本地 gitlab 網站時,即使日期有效,我也會收到過期證書錯誤:
curl --insecure -vvI https://gitlab.mysite.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }' * Server certificate: * subject: CN=gitlab.mysite.com * start date: Nov 12 14:36:12 2021 GMT * expire date: Feb 10 14:36:11 2022 GMT * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify result: certificate has expired (10), continuing anyway.
但是從瀏覽器載入站點或在另一台伺服器上使用 curl 時,我沒有收到此過期證書錯誤。該錯誤僅在託管 gitlab ce 實例的伺服器上本地使用 curl 時出現。
這是在另一台伺服器上使用 curl 時的結果:
* Server certificate: * subject: CN=gitlab.mysite.com * start date: Nov 12 14:36:12 2021 GMT * expire date: Feb 10 14:36:11 2022 GMT * issuer: C=US; O=Let's Encrypt; CN=R3 * SSL certificate verify ok.
由於 curl 正在解析到本地網站(已解析 ip = 127.0.1.1),是否可能存在問題?
我在我的 Ubuntu 16.04 機器 curl 7.47.0 上出現了這些症狀(在瀏覽器上工作,在 Curl 上失敗)。
在我的例子中,這個問題確實是由 Let’s Encrypt 過期的證書(如 Bob 提到的)觸發的,但實際上是由OpenSSL 處理多路徑證書樹的錯誤造成的。
Ubuntu 16.04
OpenSSL 上的這個問題已在 Ubuntu 16.04 軟體包的 1.0.2g-1ubuntu4.20 版本(截至今天的最新版本)上進行了修補(請參閱此處的更改日誌)。
如果您使用的是 Ubuntu 16.04,請嘗試將 OpenSSL 更新到最新版本。如果您在其他系統上,請檢查您的 OpenSSL 版本。1.1.x 之前的版本存在問題並且需要“修補”(就像上面提到的 Ubuntu 發行版所做的那樣)。如果您無法轉而使用帶有修復程序的 OpenSSL 版本,則可以求助於禁用導致問題的證書。如何禁用證書將因您的作業系統/發行版而異。
Debian 9.3
(更新的答案 - 一旦 OP 將作業系統辨識為 Debian 9.3)
似乎對於 Debian 9.3 這將是一個重複的問題(我沒有足夠的權限將其標記為這樣)。
Debian 9 上的客戶端錯誤地報告了letsencrypt 頒發的域的過期證書
並且OP 成功應用了這個答案(這相當於我上面對Ubuntu 16.04 的建議):
https ://serverfault.com/a/1080278/473319
更多資訊
以下頁面可以提供更多背景資訊和指針,以更好地理解問題。https://scotthelme.co.uk/lets-encrypt-old-root-expiration/