Ubuntu 無法驗證 Sectigo 證書

Ubuntu 無法驗證 Sectigo 證書

在我們為客戶管理的伺服器上,沒有應用程式可以存取某些 HTTPS URL,例如:

$ wget https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
--2022-12-21 15:59:58--  https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
Resolving open-data.bielefeld.de (open-data.bielefeld.de)... 194.8.223.72
Connecting to open-data.bielefeld.de (open-data.bielefeld.de)|194.8.223.72|:443... connected.
ERROR: cannot verify open-data.bielefeld.de's certificate, issued by ‘CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB’:
  Unable to locally verify the issuer's authority.
To connect to open-data.bielefeld.de insecurely, use `--no-check-certificate'.

多個程式(包括 R 和 Python 腳本)都有此問題,但我可以從桌面瀏覽器存取該 URL。我認為根憑證或憑證鏈有問題。伺服器運行 Ubuntu 20.04 LTS,所有軟體包都是最新的。什麼可能導致這個問題,有沒有辦法可以在我這邊修復它(安全且簡單)?

答案1

確實缺少一張證書,不是根證書,而是中間證書。 HTTPS 伺服器應該發送鏈中的所有憑證(減去根憑證)及其回應,但有些伺服器不會這樣做。 Web 瀏覽器可以透過使用稱為 AIA(權威資訊存取)追蹤* 的技術來應對此問題,但許多其他用戶端並未實現此功能。

正如 Steffen Ulrich 在評論中提到的,您可以找到丟失的證書並將其安裝在您的系統上。

首先拿到證書。您可以透過檢查網站手動完成此操作SSL實驗室,並谷歌搜尋遺失證書的指紋。證書應採用 PEM 格式(使用 BEGIN 和 END CERTIFICATE 進行 Base64 編碼)。在我意識到可以手動執行此操作之前,我還編寫了一個腳本來透過 AIA 取得證書:https://github.com/jdmansour/fetch-intermediate-certs

然後,要在 Ubuntu/Debian 上匯入證書,請將其放入/usr/share/ca-certificates/extra(如果需要,建立目錄)並運行sudo dpkg-reconfigure ca-certificates.它會詢問您是否應該信任系統更新時的新證書 - 選擇您喜歡的任何選項,我認為“是”是預設值。在下一個畫面中,您可以啟用新憑證。大多數使用 OpenSSL 的工具應該會立即使用它。


*) 據我所知,Firefox 沒有實現 AIA,但它也可以在那裡工作。

相關內容