聊一聊 TLS/SSL

鹹魚Linux運維發表於2023-09-22

哈嘍大家好,我是鹹魚

當我們在上網衝浪的時候,會在瀏覽器介面頂部看到一個小鎖標誌,或者網址以 "https://" 開頭
image
這意味著我們正在使用 TLS/SSL 協議進行安全通訊。雖然它可能看起來只是一個小小的鎖圖示和一個 “https” ,但實際上,這個協議在保護我們的線上隱私和安全方面扮演著至關重要的角色

那今天鹹魚就跟大家聊一聊 TLS/SSL 相關的一些知識

閱讀文章之前,需要知道:

TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)都是用於加密通訊的協議

TLS 是 SSL 的升級版本,它修復了 SSL 中存在的一些安全漏洞,並提供了更高階的安全性

中間人攻擊

一天中午,鹹魚在星巴克裡打算上網衝浪一下,這時候有一個很壞很壞的人走進了星巴克

壞人建了一個跟星巴克 WI-FI 同名的接入點,當鹹魚上網的時候,稍微不注意連線到了壞人偽造的那個假的星巴克 WI-FI,這就導致鹹魚任何流量請求都在壞人的監控之下

又或者壞人跟鹹魚都連上了星巴克 WI-FI ,然後他透過偽造 DHCP 服務來告訴鹹魚的裝置:【我就是閘道器,要上網的話,讓我幫你轉發就可以了】

當鹹魚要登陸銀行進行轉賬開始訪問銀行網站的時候,壞人截獲了鹹魚這個請求,並向銀行的網站傳送一個偽裝請求,假裝是鹹魚在請求

銀行以為這個請求來自於鹹魚,於是返回響應;壞人把這個響應截獲了,然後轉發到鹹魚的裝置上

鹹魚的裝置認為這個響應來自於銀行,於是鹹魚看到的是一個正常的銀行網站登陸介面,便乖乖地輸入了登入資訊(使用者名稱密碼等)

壞人再次截獲這些資訊,然後將其傳送給真正的銀行網站,這時候壞人已經拿到了鹹魚的登入資訊

同時,他也繼續截獲所有鹹魚與銀行之間的通訊,以便訪問鹹魚的銀行賬戶或者進行其他惡意活動

image
這便是中間人攻擊(Man-in-the-Middle Attack,簡稱 MITM 攻擊)

中間人攻擊是一種電腦保安威脅,攻擊者插入自己在通訊的兩端,竊取或篡改資訊

這種攻擊可以在不被察覺的情況下進行,因為通訊的兩方認為他們正在直接相互通訊,而實際上資訊經過了攻擊者的處理

如何避免遭受中間人攻擊呢?聰明的小夥伴很快就想到了——透過 HTTPS 來進行加密通訊!這樣即使資訊被截獲,壞人也無法輕易解密

TLS/SSL

非對稱加密

HTTPS 透過 TLS/SSL 來實現加密傳輸資料,保證資料在傳輸的過程中中間人無法解密,這樣就保證了資料的安全性

加密資料不是什麼難題,通訊的時候雙方用金鑰對資料加密就行了

但如果大家跟銀行進行加密通訊的時候用的金鑰都是一樣的,中間人依舊能夠使用這個金鑰去偽造網站然後截獲你的加密資料。這樣的話要不要金鑰都沒啥區別,甚至不還如不要金鑰呢

所以最好的情況就是:我跟銀行通訊的時候協商好用什麼金鑰——用 A 金鑰對資料加密(公鑰),然後用 B 金鑰對資料解密(私鑰),而且:

  1. A 金鑰加密的資料只能 B 金鑰解密
  2. 這個 B 金鑰只能我一個人擁有,別人是拿不到的

B 金鑰的唯一性,既保證了資料的安全(A 金鑰加密的資料只能 B 金鑰解密),又能證明我是我(即 B 金鑰只能我一個人擁有)

這便是非對稱加密技術

非對稱加密有兩個秘鑰,一個是公鑰,一個是私鑰:

  • 公鑰會放在網際網路上公開;私鑰被自己儲存,不能對外洩露
  • 公鑰加密的資料,只有對應的私鑰才可以解密
  • 只有你有私鑰,我才相信你是你

舉個例子,首先鹹魚和銀行把自己的公鑰互相給對方,在通訊的時候,鹹魚用銀行給的公鑰去加密資料併傳送給銀行,銀行拿到之後用自己的私鑰解密資料

同理,銀行用鹹魚提供的公鑰進行資料加密,然後鹹魚拿到加密資料之後用自己的私鑰進行解密
image
TLS/SSL 握手

我們在與銀行通訊的時候使用 TLS/SSL 加密傳輸資料,會有經過兩個階段:

  1. TLS/SSL 握手階段:用於建立安全的連線通道(非對稱加密)
  2. 資料傳輸階段:通道建立好之後,開始傳輸資料(對稱加密)

即在 TLS/SSL 握手階段使用的是非對稱加密技術,資料傳輸階段用的是對稱加密技術

首先網站會公開自己的公鑰(也就是大家常說的“證書”,網站的公鑰是透過數字證書公開的)

當瀏覽器連線到網站時,會先去下載網站的證書

那這裡會有一個問題:既然網站的證書是公開的,阿貓阿狗也能下載。那瀏覽器如何知道這個證書的擁有者即對方就是該網站呢?

聰明的小夥伴肯定會想到:只要能證明對方有私鑰就行了!也就是說瀏覽器用證書(即公鑰)加密一個資料,然後傳送給對方;如果對方有私鑰,那就能解密這個資料並返回給瀏覽器,那瀏覽器就知道對方身份了

瀏覽器會驗證證書的有效性(包括驗證伺服器的身份,檢查證書是否過期,是否由受信任的證書頒發機構(CA)簽發)

以此來確保正在與合法的網站通訊

所以瀏覽器會生成一個隨機數(client random),並使用伺服器的公鑰對其進行加密,然後將其傳送回伺服器

伺服器使用自己的私鑰解密此資料,並使用瀏覽器的公鑰對另一個隨機數(server random)進行加密併傳送回客戶端

這兩個隨機數將用於生成會話金鑰,用於之後的對稱加密通訊

具體TLS/SSL 握手階段請看:TLS 詳解握手流程 - 掘金 (juejin.cn)

證書頒發機構 CA

前面我們提到:瀏覽器會去驗證證書的有效性,其中包括驗證證書是否由受信任的證書頒發機構(CA)簽發

這個證書頒發機構(CA,Certification Authority)是一個權威的第三方機構,它的存在是為了告訴瀏覽器:有我做擔保,你們只管信我;只有網站的擁有者,才能擁有網站的證書

即 CA 在這個過程中充當了一個【擔保人】的角色,當瀏覽器拿到網站的證書的時候,會去問 CA :“這個證書是否合法?”

然後 CA 說:“這個證書是合法的!”,瀏覽器才會信任這個網站

網站需要向 CA 申請證書,CA 要對自己頒發的證書負責

最後

以上就是關於中間人攻擊、TLS/SSL、CA 大致的原理和內容,這篇文章花了我較大精力去寫,若是文中有不對的地方,歡迎指出

相關文章