SSL Pulse專案:TLS版本不相容問題分析報告
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月第一次監測以來的版本不相容資訊。在下面的圖表中可以看到相關資訊。
可以看到,在我們最近的監測(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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Ubuntu 18.04.6 TLS版本安裝docker問題UbuntuTLSDocker
- SSL/TLS協議安全系列:SSL/TLS概述TLS協議
- [HTTPS]SSL/TLSHTTPTLS
- node-sass和node版本不相容問題
- 完全吃透 TLS/SSLTLS
- SSL和TLS 區別TLS
- 聊一聊 TLS/SSLTLS
- SSL/TLS 深入淺出TLS
- SSL與TLS協議TLS協議
- Https、SSL/TLS相關知識及wireShark抓包分析HTTPTLS
- 中國開源專案 Grank 分析報告(2019)
- 專案問題
- bind:chooseavatar不相容問題
- 關於TLS/SSL協議TLS協議
- 用了 HTTPS 還不安全,問題就出在低版本 TLS 上HTTPTLS
- Frost :全球TLS證書報告ROSTLS
- Winform .net 4.x 請求被中止: 未能建立 SSL/TLS 安全通道問題解決ORMTLS
- pip is configured with locations that require TLS/SSL, however the ssl module in Python is not availableUITLSPythonAI
- Java專案問題Java
- SSL/TLS 握手過程詳解TLS
- TLS與SSL之間關係TLS
- 如何在 Elasticsearch 中配置 SSL / TLS ?ElasticsearchTLS
- 分析IT專案管理中常見的問題和挑戰專案管理
- 專案中常問的問題
- 填報 - 分片問題分析
- Stylus| vue專案中stylus和stylus-loader版本相容問題Vue
- mutual-tls-ssl: 為Java伺服器和客戶端設定 SSL/TLS 的分步指南TLSJava伺服器客戶端
- SSL/TLS證書有什麼作用?TLS
- Yii2.012 版本與 PHP7.2 不相容 (報錯 Cannot use 'Object' as class name as...) 問題的處理方法PHPObject
- VUE專案無法啟動NODE版本與NODE-SASS、SASS-LOADER版本不相容解決方案Vue
- WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.UITLSPythonAI
- SSL/TLS協議安全系列:SSL的Padding Oracle攻擊TLS協議paddingOracle
- ZoomEye專題報告 | DDoS 反射放大攻擊全球探測分析OOM反射
- angular版本更新與配置檔案問題Angular
- SSL證書申請問題 – HTTPS SSL 教程HTTP
- 關於使用 Laravel new 新專案 報錯的問題Laravel
- MySQL SSL連線問題MySql
- 如何分析報表效能問題