
我正在管理一個在 CentOS 7(Diladele 設備)上運行 Squid 3.5.10 的企業 Web 代理,進行 SSL 碰撞,並且在向系統信任存儲添加新的 CA 證書時遇到了一些問題,這導致我們的用戶無法使用能夠訪問幾個他們應該能夠訪問的受SSL 保護的網站。這些網站之一是https://www.sexierdating.com/(是的,聽起來就是這樣,但我們的政策是,只要合法,就不關心人們在午休期間上網衝浪)。
來自 Squid 的錯誤訊息很常見X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
,這意味著由於某種原因 Squid 不信任或無法驗證目標伺服器憑證。到目前為止,從 CA 的支援頁面獲取 PEM 格式的 CA 根證書,將其放入 中/etc/pki/ca-trust/source/anchors
,運行update-ca-trust
並重新啟動 Squid 就足以解決問題 - 但在我目前的情況下還不行。 ca-certificates 套件是當前版本,因為我剛剛在機器上運行了整個 yum 更新。
我目前遇到問題的所有網域都有「GoDaddy 安全性憑證授權單位 - G2」憑證。我從他們的支援頁面下載了每個證書(https://certs.godaddy.com/repository/),按照上述方式安裝它們,重新加載魷魚,但錯誤仍然存在。我甚至用 strace 觀察 update-ca-trust 來看看它是否真的拾取了正確的 PEM 文件 - 確實如此。
讓我有點奇怪的是,certs.godaddy.com 下載頁面似乎使用與某些有問題的網域完全相同的根證書和中間證書,但該頁面透過 Squid 工作正常。當我比較 Firefox 中的憑證時,我沒有看到整體規範和演算法有任何差異,但仍然有一個有效,而其他則無效。
我束手無策,希望有人能指出我正確的方向來解決這個問題。
答案1
電腦和瀏覽器上的 CA 儲存空間包括根 CA 憑證。
網站永遠不應從根 CA 頒發證書,而應從中間機構頒發證書。
網站有責任返回自己的證書和中介證書,因此瀏覽器可以將中介連結到它信任的根證書之一。
在您提供的網站範例中,它們不包含中間證書,因此您的使用者無法信任網站。這可以透過 ssllabs 掃描看到:https://www.ssllabs.com/ssltest/analyze.html?d=www.sexierdating.com。正如您所看到的,它只發送一個證書而不是兩個,並因此收到不完整的警告。展開「憑證路徑」部分會顯示完整的鏈,並允許您下載此中介(如果您想安裝它)。
應該注意的是,瀏覽器通常會處理這種情況 - 要么因為它們會快取訪問其他網站的通用中間證書,要么因為它會嘗試查找丟失的中間證書。大多數用戶和站點運營商通常不會發現這些錯誤配置。猜測這裡的 ssl 碰撞對於用戶處理這些錯誤來說不太友善。
這與 certs.godaddycom 形成對比(https://www.ssllabs.com/ssltest/analyze.html?d=certs.godaddy.com)正在發送完整的鏈。事實上,它遇到了相反的問題,並且發送了太多證書,因為不需要發送根證書(但也許這是由於歷史原因而存在,因為您可以看到有兩個證書鏈路徑- 其中之一需要根憑證由另一個憑證簽名,該憑證可能由信任儲存中沒有新根憑證的舊瀏覽器使用)。
無論如何,你的選擇是:
- 告訴您的用戶,這是該網站設定不正確,然後返回工作並停止浪費公司時間查看不可靠的網站。
- 將中間憑證新增到您的 Squid CA 根儲存中。當然,這不是根 CA,不應該真正存在於商店中,如果它因任何原因被撤銷,您仍然會信任它(這是證書不是從根證書頒發的原因之一,因為它很難刪除他們來自信託商店)。因此,包含此內容會帶來安全風險。
- 聯絡網站並向他們解釋問題並要求他們解決。然後準備好對用戶想要的所有其他損壞的網站進行基本故障排除!
毫無疑問,如果是我,我會選擇選項 1 :-)