Implementation

TLS 1.1/1.2 和 1.0 中的“版本不兼容”問題是什麼?

  • March 7, 2021

我不清楚是否存在多個問題,或者一個問題,(以及那個問題是什麼)伺服器錯誤地從提供 1.1 或 1.2 的客戶端協商到他們支持的東西,如 SSL 3 或 TLS 1.0

Eric Lawrence 曾說過,某些版本徹底扼殺了 TLS 1.1 和 1.2。 亞當蘭利再次指出

由於 SSL 3.0 實現中的一個不同的常見錯誤(在 SSL 3.0 被 TLS 1.0 淘汰近 12 年後),瀏覽器仍然必須執行 SSL 3.0 降級以支持有錯誤的伺服器。因此,即使使用支持 TLS 1.1 的瀏覽器和伺服器,攻擊者也可以觸發降級到 SSL 3.0 並繞過 TLS 1.1 的保護。

TLS 1.2 RFC中也有重要說明。

注意:已知某些伺服器實現會錯誤地實現版本協商。例如,當客戶端提供比 TLS 1.0 更新的版本時,有錯誤的 TLS 1.0 伺服器會簡單地關閉連接。此外,眾所周知,如果 ClientHello 中包含任何 TLS 擴展,某些伺服器將拒絕連接。與此類有缺陷的伺服器的互操作性是一個超出本文件範圍的複雜主題,並且可能需要客戶端進行多次連接嘗試。

最後,Eric Rescorla 對 TLS 有點“支持”,他補充道

首先讓我們處理 TLS 1.1 角度。從一開始就很明顯,最終的解決方法是將每個人都升級到 TLS 1.1。不幸的是,升級週期真的很長,尤其是許多流行的堆棧根本不支持 TLS 1.1。更糟糕的是,由於許多不幸的實現決策,我希望稍後有時間來寫,攻擊者可能會強制兩個 TLS 1.1 實現使用 TLS 1.0,從而使它們易受攻擊。因此,升級到 TLS 1.1 基本上是不可能的。

所有這些註釋都是關於同一個問題嗎?這個問題是否像伺服器在 1.1 或 1.2 產品({3, 2} 或 {3, 3})上阻塞一樣簡單,還是有更多問題?是否有關於 TLS 1.1 上的伺服器阻塞的任何文件或註釋?

問題不僅僅是版本號那麼簡單,儘管根據 Eric Rescorla 的說法,其中有一些。根據我的經驗,大多數有問題的實現都存在 ClientHello 擴展的問題,這些擴展是在 TLS 1.0 成為標準之後正式定義的。因此,一些伺服器被硬編碼為期待 ClientHello 並且沒有更多數據,這意味著它們將阻塞發送給它們的任何 TLS 擴展。

由於 SSLv3 沒有擴展的概念,因此我所知道的所有實現都沒有在其 ClientHello 中發送任何擴展。這會導致 SSLv3 的使用成功,即使對於接收 TLS 擴展失敗的伺服器也是如此。因此,由於瀏覽器希望連接到任何伺服器,它們會嘗試使用 TLS 和擴展進行連接,如果失敗,它們將回退並嘗試使用 SSLv3。

對於支持 TLS 1.1/1.2 的瀏覽器,它是更多的回退邏輯,因為可能伺服器不接受 1.1,但接受 1.0 就好了,所以你有多個級聯回退。

所以總結一下 - 版本號和 TLS 擴展處理是兩個最常見的問題,是的,上面的陳述都是指這些類型的問題和瀏覽器行為。

引用自:https://crypto.stackexchange.com/questions/1866