HTTPS基礎原理和配置 - 1

近期又碰到了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 編寫.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章