談談 HTTPS

sunshine小小倩發表於2017-10-16

前言:這是作為一個前端開發對 HTTPS 的淺顯的理解,僅僅是可以讓你在看完文章之後對 HTTPS 的原理了解,具體的實現方式並沒有給出。有不對的地方歡迎指出。

本文首發於我的個人網站:cherryblog.site/

什麼是 HTTPS

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。 現在它被廣泛用於全球資訊網上安全敏感的通訊,例如交易支付方面。

HTTP 與 HTTPS 的區別

  • HTTP 是明文傳輸,HTTPS 通過 SSL\TLS 進行了加密
  • HTTP 的埠號是 80,HTTPS 是 443
  • HTTPS 需要到 CA 申請證照,一般免費證照很少,需要交費
  • HTTPS 的連線很簡單,是無狀態的;HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網路協議,比 HTTP 協議安全。

為什麼要使用 HTTPS

前一段時間,公司要求對全棧使用 HTTPS,當時我還在想,HTTPS 不是隻用於支付的環節嗎,為什麼要全棧都使用 HTTPS,真的是圖樣圖森破
其實使用 HTTPS 最主要的用處是以下兩點:

  • 建立一個資訊保安通道,來保證資料傳輸的安全
  • 確認網站的真實性,防止釣魚網站

HTTPS 原理

在看 HTTPS 的時候,在 GOOGLE 搜尋的大部分都是一些比較專業的術語,對於一個前端來說,對這些什麼應用層、傳輸層的協議和各種伺服器的資訊都不是很瞭解,所以看的不是很明白也看不進去,於是,看到一篇文章:一個故事講完https 表示勉強可以理解,/(ㄒoㄒ)/~~,於是對其詳細的研究了下,對於前端理解 HTTPS 還是可以看一下的。

本文其實就是對這篇文章的理解,不知道其他小夥伴都是什麼水平,我是看 HTTPS 原理比較吃力的

序言

來自中國的張大胖和位於米國的 Bill 進行通訊

總是有一種被偷看的感覺

由於張大胖和 Bill 都是使用 HTTP 進行通訊,HTTP 是明文的,所以他們的聊天都是可被窺視的。於是,二人準備想要改變現狀,所以 HTTPS 首先要解決的問題就是要保證傳輸的內容只有這兩個人能看懂

plan1:使用對稱金鑰

使用對稱金鑰
使用對稱金鑰

兩人商量了一下,可以使用對稱金鑰進行加密。(對稱金鑰也就是加密和解密使用的是同一個金鑰)

但是問題又來了~既然網路是不安全的,那麼最開始的時候怎麼將這個對稱金鑰傳送出去呢?如果對稱金鑰在傳送的時候就已經被攔截,那麼傳送的資訊還是會被篡改和窺視啊~~

所以這種對稱金鑰的弊端就是,可能被中間人攔截,這樣中間人就可以獲取到了金鑰,就可以對傳輸的資訊就行窺視和篡改。

plan2:使用非對稱金鑰

使用非對稱金鑰
使用非對稱金鑰

RSA(非對稱加密演算法):雙方必須協商一對金鑰,一個私鑰一個公鑰。用私鑰加密的資料,只有對應的公鑰才能解密,用公鑰加密的資料, 只有對應的私鑰才能解密。

非對稱加密演算法
非對稱加密演算法

這樣的話 Bill 將自己的公鑰給張大胖,張大胖傳送的資訊使用 Bill 的公鑰加密,這樣,只有 Bill 使用自己的私鑰才能獲取

但是這樣有個弊端:

  • RSA 演算法很慢= =,要慢很多

所以為了解決這個問題,我們使用非對稱金鑰+對稱金鑰結合的方式

plan3:非對稱金鑰+對稱金鑰

使用對稱金鑰的好處是速度比較快,使用非對稱金鑰的好處是可以使得傳輸的內容不能被破解,因為就算你攔截到了資料,但是沒有 Bill 的私鑰,也是不能破解內容的。就比如說你搶了一個保險櫃,但是沒有保險櫃的鑰匙也不能開啟保險櫃。

所以我們要結合兩者的優點。使用 RSA 的方法將加密演算法的對稱金鑰傳送過去,之後就可以使用使用這個金鑰,利用對稱金鑰來通訊了。就比如說我將鑰匙放進了保險櫃,然後將保險櫃寄給對方。

中間人攻擊

還有一個問題就是在使用非對稱金鑰的時候,首先需要將 Bill 的公鑰給張大胖,那麼在這個過程中,安全是沒有保障的,中間人可以攔截到 Bill 的公鑰,就可以對攔截到的公鑰進行篡改。

這也就是相當於我有手機號,雖然是公開的,誰都可以給我打電話,但是剛開始你並不知道我的手機號,我需要將我的手機號發給你,在我發給你我的手機號的時候,被中間人攔截了,然後將我正確的手機號換成了錯誤的手機號,比如:110,然後,你收到的就是錯誤的手機號:110,但是你自己還不知道你收到的是錯的手機號,這時候,你要是給我打電話,就尷尬了~~

確認身份 —— 數字證照

所以以上的步驟都是可行的,只需要最後一點就可以了,要確定 Bill 給張大胖的公鑰確實是 Bill。 的公鑰,而不是別人的。(剛剛電話號碼的那個例子,也就是說,需要確定我給你發的電話號碼是我的,沒有被修改的)

那怎麼確認 Bill 給張大胖的公鑰確實是 Bill 的呢?

這個時候就需要公證處的存在了。也就是說我需要先將我的電話號碼到公證處去公證一下,然後我將電話號碼傳給你之後,你在將你收到的電話號碼和公證處的比對下,就知道是不是我的了。

對應到計算機世界,那就是數字簽名

數字簽名
數字簽名

數字簽名也就是相當於公證處在公證照上蓋章。

數字證照
數字證照

數字簽名和原始資訊合在一起稱為數字證照,Bill 只需將數字證照傳送給張大胖就可以了。

在拿到數字證照之後,就用同樣的Hash 演算法, 再次生成訊息摘要,然後用CA的公鑰對數字簽名解密, 得到CA建立的訊息摘要, 兩者一比,就知道有沒有人篡改了!

對比訊息摘要是否相同
對比訊息摘要是否相同

以上你全部看完並且理解了,那麼對於 HTTPS 你也就大概有個瞭解了。

聽說寫文章可以得非同步社群的書,非同步社群作為國內頂尖的IT專業圖書社群,它的書我非常想要,所以我竭力寫了這篇文章,我想要這本書(《Python極客專案程式設計》

大家如果覺得好給我點個贊吧

相關文章