近期又碰到了SSL相關的事情, 就心血來潮開個新專題 - 《HTTPS基礎原理和配置》
本文是第一篇文章, 主要介紹SSL TLS加密協議的相關內容。
加密協議歷史概要
SSL TLS加密協議其實並沒有很長的歷史,1995年網景發佈了SSL v2.0,這也是web加密的開始。這使得電子商務領域,人們可以在線提交密碼和信用卡,並且至少是相當安全的。
SSLv3.0很快發佈,這版被保羅·柯克(Paul Coker)及其他人完全重寫。這是一個非常堅實的協議。事實上,IETF採用SSL v3.0,並使它成爲並不是網景獨有的協議,叫做TLS(Transport Layer Security)。SSL意思是安全套接字層,但現在叫傳輸層安全。
所以,TLS v1.0幾乎和SSL v3.0 一模一樣,只是進行了一兩個小優化,並且IAF使之標準化。如果你深究這些協議,TLS v1.0實際上就是SSL v3.1;所以你可以認爲他們是連續的。
但是最終IETF提出了新版本v1.1(一些小優化),然後是v1.2,引入了一些新的加密算法。但是看到這你可能會想“好吧,有些客戶端支持這些,有些客戶端支持更新的,這取決於它們發佈的時間. 安全性上可能差不太多". 但實際在安全意義上,這些中的大多數已經以被破解了。
關鍵歷史節點
- SSL v2.0 1995年 網景 發佈
- SSL v3.0 1996年發佈 修復v2的主要問題
- TLS v1.0 1999年 IETF發佈;對SSLv3小優化
- TLS v1.1 2006年 發佈 小優化
- TLS v1.2 2008年發佈 改進hash和AEAD模式
:joy: 被破解歷史概要
首先是SSL v2.0, 設計之初就被破解:joy::joy::joy:, 所以,ssl v2.0確實不推薦使用;已經被破解很長很長時間了,不安全。 我們經常聽到的支持的SSL版本一般也是從SSL v3.0開始的.
SSL v3.0呢, 之前一直在用,直到2014年11月被破解。
TLS
v1.0和v1.1基本安全。
最新的v1.2(其實現在已經不算最新的了, TLS v1.3已經出來了, 但是目前主流的最新協議還是1.2), 是唯一一個還沒有針對性攻擊的版本(PS: 當然, 近期也有針對TLS v1.2的漏洞爆出, 但還算OK)。
TLS有一個混亂的歷史,並沒有真正最好的安全記錄,但TLS v1.2一直還是最好的,當涉及到與瀏覽器和服務的交互,它內置在幾乎一切的瀏覽器和服務器中(最新的)。
所以,TLS
v1.2是大勢所趨, 如果涉及到關鍵業務數據交互, 如用戶關鍵信息 支付 金融等場景, TLS v1.2才能真正有保障, 而其他老的加密協議, 都已經被破解了, 黑客想拿到你的數據(如果你用老的加密協議)只是時間問題, 並不存在技術上的難點。所以評估ATS(蘋果的安全相關要求)合規也要求該版本。
:joy: 被破解關鍵歷史節點
- :exclamation::exclamation::exclamation::exclamation::exclamation: SSL v2.0 1995發佈 - 設計之初被破解
- :exclamation::exclamation::exclamation: SSL v3.0 1996發佈 – 被POODLE破解(2014 .11)
- :exclamation::exclamation: TSL v1.0 1999發佈 – BEAST(2011)和Lucky 13(2013)發現漏洞
- :exclamation: TLS v1.1 2006發佈 – 被Lucky 13(2013)和RC4(2013,2015)發現漏洞
- TLS v1.2 2008發佈 – 只有在AEAD模式下是安全的
客戶端兼容性
:exclamation: 注意:
如果有條件, 強烈建議只選擇 TLS v1.2版本. (對於傳統企業, 真的挺難做到的)
根據以上的內容來看, 那我只選擇TLS v1.2協議好了, 但實際情況是, TLS v1.2 是2008年才發佈的(標註發佈), 而真正要落到實處所需要的時間更長. 所以很多客戶端並不支持TLS v1.2.
這些客戶端, 是廣義的客戶端, 包括:
- 操作系統
- 瀏覽器
- 手機
- 胖客戶端(如Java客戶端)
- ...
所以,如果你計劃服務器只選擇1.2版本,你就可能失去了很多潛在客戶(還在用舊的客戶端的客戶, 當然, 說不定用着舊電腦的員工也被拒之門外了...)。這並不是最好的舉動,除非對絕對安全非常敏感。否則的話, 還是建議支持更多的安全協議讓更多的客戶可以兼容. 是吧? 畢竟比起http這種裸奔, 其他舊的協議好歹還是穿着衣服的.:smirk:
但是, 另一些大平臺, 已經開始傾向於v1.2。比如ios之前的ATS合規要求, 比如微軟建議你放棄TLS v1.0和 TLS v1.1的支持。因此,行業正在朝着標準邁進。
支持TLS v1.2客戶端列表
- Windows 8 以上 (Windows Server 2008以上 - 2017年下半年才支持) (:exclamation: win7不支持! 更別提win xp了)
- RHEL 或 CentOS ≥ 6.5 (:exclamation: 用CentOS 5.X的注意了啊, 不支持TLS v1.2 )
- Chrome ≥ 30
- 安卓 ≥ 5.0
- 火狐瀏覽器 ≥ 27
- IE/Edge ≥ 11 (:exclamation:主流的IE8 9 10都不支持!)
- iOS ≥ 5
- 注意:iOS 9應用需要TLS 1.2支持。(ATS合規要求, 當時後來好像很難推下去)
支持TLS 1.0 客戶端列表
TLS 1.0 (真正安全的最老版本)幾乎都支持(除了win xp sp2)。
配置建議
再次推薦SSL Labs, 打分如下:
高安全性 低兼容性
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
只支持TLS v1.2. 當你配置加密協議時,如果只選擇TLS
1.2,得分會是A。
中安全性 高兼容性
SSLProtocol all -SSLv3
只支持TLS協議, 得分也會是A. (之前的, 近期不確定, 感興趣的可以測一下).
低安全性 最大兼容性
SSLProtocol all
如果使用SSLv3.0,有風險,得C。
總結
選擇加密協議, 要根據具體的需求, 有側重, 也要做到安全性和兼容性的兼顧.
我之前有個相關的PPT, 感興趣的話後續發上來.
三人行, 必有我師; 知識共享, 天下爲公. 本文由東風微鳴技術博客 EWhisper.cn 編寫.