SSL Pulse專案:TLS版本不相容問題分析報告

hdgara1發表於2020-03-10

SSL Pulse專案:TLS版本不相容問題分析報告

你會經常聽到說TLS是最重要的安全協議。通常這種說法的理由是,TLS被廣泛地部署,並且為許多較高層級的協議工作。這當然沒錯,但相對於那些更接近較高層協議的其它協議來說,還有另一方面的原因:我們能夠透過研究TLS的演化而對協議的設計有深入的瞭解。

協議版本不相容

我們得到的一個很重要的經驗是:不使用明確的協議版本號。在TLS中,這成了一系列麻煩的根源,導致了時間的浪費和安全問題。其根本原因是,當客戶端要求就一個它無法理解的TLS版本號進行協商時,很多伺服器會崩潰。按照協議的技術規範,伺服器應該拒絕使用未知版本而使用其所能提供的最高版本。

儘管這是一個伺服器端的問題(從更深層次上來說,是協議庫的問題),但實際上當瀏覽器與某一站點無法通訊時,人們卻把問題完全歸咎於瀏覽器。這就導致了一種被叫做主動協議降級的行為:當使用最高版本協議的嘗試失敗後,瀏覽器會嘗試次高版本、第三級版本,以此類推,直到能夠與伺服器成功建立一個加密通道。

雖然這種瀏覽器行為增強了協同性,但卻減緩了通訊速度,同時使那些活躍的攻擊者能夠把通訊安全等級降低到客戶端和瀏覽器所支援的最低版本的協議上。

經過多年努力,那些主要的瀏覽器供應商才最終制止了這種情況。首先是解決了發現POODLE攻擊促使降低到SSL v3版本的問題。

TLS1.3 版本不相容的問題會一直持續到新的協議版本釋出。TLS1.3雖已經接近完成,但我們還得面對很多伺服器不支援的殘酷事實,因此協議版本被降低使用的情況就又可能相應出現了。

SSL實驗室中的版本不相容測試

在一些SSL實驗室中,協議版本不相容測試已經進行了很長時間。如果你不幸進入一臺與TLS1.0、1.1或1.2中的某個版本不相容的伺服器,那麼你會收到一個嚴重警告,但這樣的伺服器變得越來越少;畢竟,大部分瀏覽器到2013年底已開始使用TLS1.2,這意味著已經有幾年的時間用來解決版本不相容問題了。

我們也為TLS1.3和其他一些很高版本的協議做了不相容測試。現在看來TLS1.3的測試結果很有意義,而其他測試可能更讓協議開發者感興趣。

鑑於TLS1.3即將釋出,我們要讓不相容警告更突出,同時在評估伺服器的時候考慮到這一點。我們很快將會發貼對它單獨進行討論。

在SSL Pulse專案中追蹤版本不相容問題

我們的SSL Pulse專案監控著15萬個最常用網站的SSL/TLS配置,不間斷地提供從2012年4月第一次監測以來的版本不相容資訊。在下面的圖表中可以看到相關資訊。

ssl-pulse-protocol-intolerance

可以看到,在我們最近的監測(2016年7月)中,樣本中3.2%的伺服器不喜歡TLS1.3,3.6%的伺服器不喜歡TLS2.152。這聽起來不算多,但對瀏覽器來說卻是個大問題,因為這意味著它要對數千個網站進行解譯,其中一些網站還非常流行。

你還會注意到在2015年5月,不相容伺服器的數量有一個巨大的降幅,這佐證了一種解釋。當我們第一次測定版本不相容問題時,其測定資料真的非常大;最多時有12%的伺服器對TLS1.2不相容,超過60%的伺服器對TLS2不相容。在這種情況下,幾乎不可能順利地引入一個新版本的協議。但那時已經有人意識到,TLS1.3可以減少這個問題的發生。

如果你看任何版本的SSL或TLS協議底層,你會看到他們都使用兩種不同的版本號。一種版本號用於主協議(TLS1.0、1.1等等),但還有記錄層版本號。你可以把記錄層看成一個次協議。因為有兩種版本號,所以在傳送的每個欄位中使用哪個版本號總會產生混淆。一些客戶端會僅使用主協議版本號(如TLS1.2),但在SSL3或TLS1.0中保留記錄層版本號,以便指明在記錄層中沒有變化。但是,一些客戶端會在這兩個欄位中都使用較高的版本號,在我們的測試中自然只能模擬到最壞的情況。

不管怎樣,大多數問題都來源於記錄層不相容。考慮到沒人真的需要兩種版本號,因而TLS1.3的技術規範棄用了記錄層版本號,並把它固定在TLS1.0(0x0301)。經過一段時間,於2015年5月我們開始按照新規則測試時,版本不相容問題的數量大大降低了。

全球可信CA機構

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31483669/viewspace-2679322/,如需轉載,請註明出處,否則將追究法律責任。

相關文章