HTTPS基礎原理和配置 - 1

東風微鳴發表於2023-02-13

近期又碰到了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模式

? 被破解歷史概要

首先是SSL v2.0, 設計之初就被破解???, 所以,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(蘋果的安全相關要求)合規也要求該版本。

? 被破解關鍵歷史節點

  • ❗❗❗❗❗ SSL v2.0 1995釋出 - 設計之初被破解
  • ❗❗❗ SSL v3.0 1996釋出 – 被POODLE破解(2014 .11)
  • ❗❗ TSL v1.0 1999釋出 – BEAST(2011)和Lucky 13(2013)發現漏洞
  • ❗ T​LS v1.1 2006釋出 – 被Lucky 13(2013)和RC4(2013,2015)發現漏洞
  • TLS v1.2 2008釋出 – 只有在AEAD模式下是安全的

客戶端相容性

❗ 注意:

如果有條件, 強烈建議只選擇 TLS v1.2版本. (對於傳統企業, 真的挺難做到的)​

根據以上的內容來看, 那我只選擇TLS v1.2協議好了, 但實際情況是, TLS v1.2 是2008年才釋出的(標註釋出), 而真正要落到實處所需要的時間更長. 所以很多客戶端並不支援TLS v1.2.

這些客戶端, 是廣義的客戶端, 包括:

  • 作業系統
  • 瀏覽器
  • 手機
  • 胖客戶端(如Java客戶端)
  • ...

所以,如果你計劃伺服器只選擇1.2版本,你就可能失去了很多潛在客戶(還在用舊的客戶端的客戶, 當然, 說不定用著舊電腦的員工也被拒之門外了...)。這並不是最好的舉動,除非對絕對安全非常敏感。否則的話, 還是建議支援更多的安全協議讓更多的客戶可以相容. 是吧? 畢竟比起http這種裸奔, 其他舊的協議好歹還是穿著衣服的.?

但是, 另一些大平臺, 已經開始傾向於v1.2。比如ios之前的ATS合規要求, 比如微軟建議你放棄TLS v1.0和 TLS v1.1的支援。因此,行業正在朝著標準邁進。

支援TLS v1.2客戶端列表

  • Windows 8 以上 (Windows Server 2008以上 - 2017年下半年才支援) (❗ win7不支援! 更別提win xp了)
  • RHEL 或 CentOS ≥ 6.5 (❗ 用CentOS 5.X的注意了啊, 不支援TLS v1.2 ​)
  • Chrome ≥ 30
  • 安卓 ≥ 5.0
  • 火狐瀏覽器 ≥ 27
  • IE/Edge ≥ 11 (❗主流的IE8 9 10都不支援!)
  • iOS ≥ 5
    • 注意:iOS 9應用需要TLS 1.2支援。(ATS合規要求, 當時後來好像很難推下去)

支援TLS 1.0 客戶端列表

TLS 1.0 (真正安全的最老版本)幾乎都支援(除了win xp sp2)。

win xp sp2

配置建議

再次推薦SSL Labs, 打分如下:

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 編寫.

相關文章