SSL/TLS 協定知多少 - 基礎篇
前言
SSL / TLS ?
最近筆者剛轉職,正要進行第一個專案 👾
在某次 Sync 的會議中突然被問到:
舊版本的 SSL/TLS 為什麼危險,應該知道吧?
腦中突然浮現:「啊!之前在看 Microsoft 官方文檔確實有看到這塊,它建議升版 o.o」
好了,問題來了!
那更深層次的問題,以及如何清楚解釋,我知道嗎?
於是就有了這篇的誕生 ☺ 讓我們看下去吧!
為什麼過去的 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)😇
握手的過程像是以下這樣:
關鍵澄清:
上方的圖片代表的是邏輯步驟,實際上這五個步驟不等於五個「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.0 | 1995 | 淘汰 | 有嚴重安全漏洞,會洩漏明文資訊 |
SSL 3.0 | 1996 | 淘汰 | 被發現有 POODLE 攻擊漏洞 |
TLS 1.0 | 1999 | 淘汰 | SSL 3.0 的後繼者,但已不安全,被瀏覽器全面棄用 |
TLS 1.1 | 2006 | 淘汰 | 加強了一些傳輸安全,但已過時,2020 年起被主流停用 |
TLS 1.2 | 2008 | 主流標準 | 現在最廣泛使用,支援強加密(如 AES-GCM、SHA-2) |
TLS 1.3 | 2018 | 最新版本 | 精簡握手流程、速度更快、移除不安全加密法(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
透過上述的指令,我們可以得到以下結果:
仔細觀察會發現,有個 "ciphers" 字樣,底下有一堆密密麻麻不知所云的代號XD ,然後後面有個評級,如:A、B、C 等等。
其實這邊的 "Ciphers" 指的就是 "Cipher Suites" ~
那啥是 "Cipher Suites" ?
Cipher Suites
先從一段白話文開始:
Cipher Suite 是「TLS 安全協定使用的加密戀愛組合拳」,每一個連線都會選擇一組來保護通訊。
而此處說的組合拳,其實就是「戀愛四階段 💁」
建立一段安全的加密連線,就像談一場讓人安心的小戀愛。每一段戀愛(連線)都會經歷以下 4 個階段,每個階段都對應一項加密技術,組合起來就叫做一組 Cipher Suite。
廢話不多說,直接上圖!
「奇怪?不是說四個嗎?怎麼看起來只有三個?」
其實一點也不奇怪 XD 我們可以往下看,倒底發生什麼事情了?
說白了,它把第 1 步(金鑰交換 - Key Exchange)和第 2 步(身份驗證 - Authentication)合在一起了,直接用 RSA 同時完成: 金鑰交換是用 RSA 公鑰直接加密 session key、伺服器的憑證也是用 RSA 簽名(身分驗證)。
所以整體來說,它是:
到這裡,我們大概就會對 Cipher Suite 有一些概念。
接下來我們就可以繼續探討另一個問題:
為什麼會有這麼多 Cipher Suite ? 我看它密密麻麻的。
其實用一句白話文來說,就是:
為了支援不同的環境、裝置、效能與安全需求,伺服器會列出好幾種組合,讓對方來挑選最合適的!
所以,當我們下指令的時候才會看到這麼多結果:
2. Qualys SSL Labs
除了用 nmap 以外,也可以使用比較彩色的工具 - Qualys SSL Labs:https://www.ssllabs.com/ssltest/
然後輸入目標網站的網址玩玩看,以下是掃某網站得出的結果:
基本上,會看到整體評級以及一些協定、加密相關的評分:
像是在此處就看到很多 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/
留言
張貼留言