SSL/TLS 協定知多少 - 基礎篇

前言

SSL / TLS ?

最近筆者剛轉職,正要進行第一個專案 👾

在某次 Sync 的會議中突然被問到:


舊版本的 SSL/TLS 為什麼危險,應該知道吧? 


腦中突然浮現:「啊!之前在看 Microsoft 官方文檔確實有看到這塊,它建議升版 o.o」

好了,問題來了!


那更深層次的問題,以及如何清楚解釋,我知道嗎?


於是就有了這篇的誕生 ☺ 讓我們看下去吧!


SSL/TLS 防護罩


為什麼過去的 SSL/TLS 舊版協定比較危險?

先聊聊什麼是 SSL/TLS


SSL(Secure Sockets Layer)/ TLS(Transport Layer Security)是一種用來加密網路連線的安全協定,用來確保你和網站之間傳輸的資料不會被偷看、不會被竄改。


TLS 是 SSL 的後續版本,目前已發展到 TLS 1.3,具備更高的安全性與效能;舊版本如 SSL 3.0、TLS 1.0 和 1.1 已被淘汰,現代網站多採用 TLS 1.2 或 TLS 1.3 作為主流標準。


相關重點:SSL/TLS 握手(以 TLS 1.2 為例)

當 TLS 或 SSL 連線開始時,雙方會進行一個關鍵步驟叫做:「握手(Handshake)」。

這就像談戀愛前的「確認彼此身分與溝通規則」,要談情說愛之前,得先確定你是誰、我們怎麼講話、要不要加密、用哪種暗號(Cipher Suite)😇

握手的過程像是以下這樣:


TLS 1.2 握手流程

關鍵澄清:

上方的圖片代表的是邏輯步驟,實際上這五個步驟不等於五個「RTT(Round Trip Time)」~


TLS 1.2 的實際 RTT 解釋如下: 

在 TLS 1.2 中,完成一次完整握手大約需要「兩次往返(2-RTT)」的傳輸時間: 


1. 第一個 RTT: 

Client 發送 Client Hello(我支援這些 Cipher Suites) 

Server 回應 Server Hello + 憑證 + Key Exchange + Hello Done 


2. 第二個 RTT: 

Client 發送 Client Key Exchange + Change Cipher Spec + Finished 

Server 回應 Change Cipher Spec + Finished


補充:

TLS 1.3 更進一步只需 1-RTT,速度更快


SSL/TLS 版本有哪些?


協定版本發佈年份狀態安全性說明
SSL 1.0未公開未釋出只存在於設計階段,太不安全被放棄
SSL 2.01995淘汰有嚴重安全漏洞,會洩漏明文資訊
SSL 3.01996淘汰被發現有 POODLE 攻擊漏洞
TLS 1.01999淘汰SSL 3.0 的後繼者,但已不安全,被瀏覽器全面棄用
TLS 1.12006淘汰加強了一些傳輸安全,但已過時,2020 年起被主流停用
TLS 1.22008主流標準現在最廣泛使用,支援強加密(如 AES-GCM、SHA-2)
TLS 1.32018最新版本精簡握手流程、速度更快、移除不安全加密法(RC4、SHA1 等)


以上謝謝 GPT 幫忙整理 XD


其實,由上應該不難看出「為何建議不要用 TLS 1.1 之類的舊版本」了吧!

因為它們的 加密演算法太舊、太弱、太容易被破解(我們稱這種加密為「弱密碼(weak cipher)」)。



弱密碼?

何謂弱密碼?


弱密碼是加密協定中的某個組合項目(cipher algorithm),其因設計不良、位元長度太短、模式缺陷或遭破解等原因,不再能提供強而有效的保密性、完整性或身分驗證功能


白話文版本:


弱密碼指的是那些已經不夠安全的「加密演算法或加密方式」,駭客可以用已知技術快速破解、還原或操縱這些密碼保護的資料。那種感覺就像是:「你明明在對帥哥說悄悄話,結果他的軍師把你們的對話內容看光光(的那種羞恥)。」


在了解弱密碼為何後,稍微看一下常見的弱密碼 ~ 


常見的弱密碼為何?

筆者在這邊提供一張簡單的表格給大家參考,稍微有個概念即可 💪

弱密碼黑名單

有關這些密碼為什麼弱密碼,之後有時間再聊聊 XD

接下來,我們來看看檢查 SSL/TLS 設定的方式吧~


簡單的檢查方式

如果想要描網站的 SSL/TLS 設定,列出支援哪些 Cipher Suites,哪些安全、哪些不安全。可以採用以下方法:


1. nmap

舉例來說:


nmap --script ssl-enum-ciphers -p 443 google.com


透過上述的指令,我們可以得到以下結果:


對 google.com 進行 nmap 掃描


仔細觀察會發現,有個 "ciphers" 字樣,底下有一堆密密麻麻不知所云的代號XD ,然後後面有個評級,如:A、B、C 等等。


其實這邊的 "Ciphers" 指的就是 "Cipher Suites" ~


那啥是 "Cipher Suites" ?


Cipher Suites

先從一段白話文開始:


Cipher Suite 是「TLS 安全協定使用的加密戀愛組合拳」,每一個連線都會選擇一組來保護通訊。


而此處說的組合拳,其實就是「戀愛四階段 💁」


建立一段安全的加密連線,就像談一場讓人安心的小戀愛。每一段戀愛(連線)都會經歷以下 4 個階段,每個階段都對應一項加密技術,組合起來就叫做一組 Cipher Suite。


廢話不多說,直接上圖!


主要分為四個部分,分別對應到以下圈起來的 Cipher Suite 實例的幾個部分:



此時,看到這裡的讀者們應該會發現一個奇特的狀況:

「奇怪?不是說四個嗎?怎麼看起來只有三個?」


其實一點也不奇怪 XD 我們可以往下看,倒底發生什麼事情了?


說白了,它把第 1 步(金鑰交換 - Key Exchange)和第 2 步(身份驗證 - Authentication)合在一起了,直接用 RSA 同時完成: 金鑰交換是用 RSA 公鑰直接加密 session key、伺服器的憑證也是用 RSA 簽名(身分驗證)。


所以整體來說,它是:

Cipher Suite 實例解析

到這裡,我們大概就會對 Cipher Suite 有一些概念。

接下來我們就可以繼續探討另一個問題:


為什麼會有這麼多 Cipher Suite ? 我看它密密麻麻的。


其實用一句白話文來說,就是:


為了支援不同的環境、裝置、效能與安全需求,伺服器會列出好幾種組合,讓對方來挑選最合適的! 


所以,當我們下指令的時候才會看到這麼多結果:

nmap 掃描結果截圖

以及會看到 "Cipher preference",它代表著「『誰』優先決定要用哪一套組合拳」

在這邊就是 "Server" 優先 ✌


2. Qualys SSL Labs

除了用 nmap 以外,也可以使用比較彩色的工具 - Qualys SSL Labs:https://www.ssllabs.com/ssltest/

然後輸入目標網站的網址玩玩看,以下是掃某網站得出的結果:


Qualys SSL Labs 掃描結果 Summary 截圖

基本上,會看到整體評級以及一些協定、加密相關的評分:

Qualys SSL Labs 掃描結果 Configuration 截圖


像是在此處就看到很多 Weak 字眼,這時若有安全上的考量,我們可以考慮移除它。

至於其他關於「如何修正與升級時可能遇到的取捨(Trade-off)」等議題,我們就留待下一篇再來深入探討吧~



參考資料


Rating Guide:https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide

TLS 相關:

https://aws.amazon.com/tw/compare/the-difference-between-ssl-and-tls/

https://learn.microsoft.com/zh-tw/dotnet/framework/network-programming/tls#configuring-security-via-the-windows-registry

留言

這個網誌中的熱門文章

資安基礎惡補 - 網路篇 - DNS

About Me - 關於我的一切