AddTrust 根憑證棄用會導致 OpenSSL 和 GnuTLS 系統崩潰

30月20日,根證書XNUMX年有效期限到期 添加信任應用 產生最大的認證機構 Sectigo (Comodo) 之一的交叉簽名證書。 交叉簽章允許與未將新 USERTRust 根憑證新增至其根憑證儲存中的舊裝置相容。

AddTrust 根憑證棄用會導致 OpenSSL 和 GnuTLS 系統崩潰

從理論上講,終止AddTrust 根憑證只會導致違反與舊系統(Android 2.3、W​​indows XP、Mac OS X 10.11、iOS 9 等)的兼容性,因為交叉簽章中使用的第二個根憑證仍然存在有效且現代的瀏覽器在檢查信任鏈時會考慮這一點。 練習中 出現 非瀏覽器 TLS 用戶端(包括基於 OpenSSL 1.0.x 和 GnuTLS 的客戶端)中的交叉簽章驗證問題。 如果伺服器使用透過信任鏈連結到 AddTrust 根證書的 Sectigo 證書,則不再建立安全連接,並出現錯誤,指示證書已過期。

如果現代瀏覽器的使用者在處理交叉簽署的 Sectigo 憑證時沒有註意到 AddTrust 根憑證已過時,那麼各種第三方應用程式和伺服器端處理程序就會開始出現問題,從而導致 違反 工作 許多基礎設施使用加密通訊通道進行元件之間的互動。

例如,有 問題 存取 Debian 和 Ubuntu 中的一些軟體包儲存庫(apt 開始產生憑證驗證錯誤),使用「curl」和「wget」實用程式的腳本請求開始失敗,使用 Git 時觀察到錯誤, 侵犯了 Roku 串流平台正在運行,不再呼叫處理程序 條紋 и DataDog, 開始 發生崩潰 在 Heroku 應用程式中, 停止了 OpenLDAP 用戶端連接,偵測到使用 STARTTLS 將郵件傳送到 SMTPS 和 SMTP 伺服器時發生問題。 此外,在使用具有 http 用戶端的模組的各種 Ruby、PHP 和 Python 腳本中也發現了問題。 瀏覽器問題 影響 Epiphany,停止載入廣告封鎖清單。

Go 程式不受此問題的影響,因為 Go 提供 自己的實現 TLS。

假設此問題影響較舊的發行版(包括 Debian 9、Ubuntu 16.04、 瑞爾 6/7)使用有問題的 OpenSSL 分支,但問題 表現出來 當 APT 套件管理器在目前版本的 Debian 10 和 Ubuntu 18.04/20.04 中運行時也是如此,因為 APT 使用 GnuTLS 庫。 問題的關鍵在於,許多 TLS/SSL 函式庫將憑證解析為線性鏈,而根據 RFC 4158,憑證可以表示有向分散式循環圖,其中需要考慮多個信任錨。 關於 OpenSSL 和 GnuTLS 中的此缺陷 眾所周知 很多年了。 在 OpenSSL 中,該問題在分支 1.1.1 中得到修復,並在 的GnuTLS 遺跡 未修正的.

作為解決方法,建議從系統儲存中刪除「AddTrust 外部 CA 根」憑證(例如,從 /etc/ca-certificates.conf 和 /etc/ssl/certs 中刪除,然後執行「update-ca」 -certificates -f -v"),之後OpenSSL 開始在其參與下正常處理交叉簽章憑證。 使用 APT 套件管理器時,您可以自行承擔風險地停用單一要求的憑證驗證(例如,「apt-get update -o Acquire::https::download.jitsi.org::Verify-Peer=false」) 。

為了阻止這個問題 Fedora и RHEL 建議將AddTrust憑證新增至黑名單:

trust dump —filter «pkcs11:id=%AD%BD%98%7A%34%B4%26%F7%FA%C4%26%54%EF%03%BD%E0%24%CB%54%1A;type=cert» \
> /etc/pki/ca-trust/source/blacklist/addtrust-external-root.p11-kit
更新 ca-trust 摘錄

但這個方法 不工作 對於 GnuTLS(例如,執行 wget 公用程式時會繼續出現憑證驗證錯誤)。

在伺服器端你可以 修改 順序 列出伺服器傳送給客戶端的信任鏈中的憑證(如果與「AddTrust external CA Root」關聯的憑證從清單中刪除,則用戶端驗證將成功)。 要檢查並產生新的信任鏈,您可以使用該服務 Whatsmychaincert.com。 門扇也 假如 替代交叉簽名中間證“AAA證書服務「,有效期至 2028 年,並將保持與舊版作業系統的兼容性。

補充:問題也 表現出來了 在 LibreSSL 中。

來源: opennet.ru

添加評論