談談 HTTPS

前言:這是做爲一個前端開發對 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:使用對稱密鑰

使用對稱密鑰
使用對稱密鑰

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

可是問題又來了~既然網絡是不安全的,那麼最開始的時候怎麼將這個對稱密鑰發送出去呢?若是對稱密鑰在發送的時候就已經被攔截,那麼發送的信息仍是會被篡改和窺視啊~~3d

因此這種對稱密鑰的弊端就是,可能被中間人攔截,這樣中間人就能夠獲取到了密鑰,就能夠對傳輸的信息就行窺視和篡改。

plan2:使用非對稱密鑰

使用非對稱密鑰
使用非對稱密鑰

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

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

這樣的話 Bill 將本身的公鑰給張大胖,張大胖發送的信息使用 Bill 的公鑰加密,這樣,只有 Bill 使用本身的私鑰才能獲取

可是這樣有個弊端:

  • RSA 算法很慢= =,要慢不少

因此爲了解決這個問題,咱們使用非對稱密鑰+對稱密鑰結合的方式

plan3:非對稱密鑰+對稱密鑰

使用對稱密鑰的好處是速度比較快,使用非對稱密鑰的好處是可使得傳輸的內容不能被破解,由於就算你攔截到了數據,可是沒有 Bill 的私鑰,也是不能破解內容的。就好比說你搶了一個保險櫃,可是沒有保險櫃的鑰匙也不能打開保險櫃。

因此咱們要結合二者的優勢。使用 RSA 的方法將加密算法的對稱密鑰發送過去,以後就可使用使用這個密鑰,利用對稱密鑰來通訊了。就好比說我將鑰匙放進了保險櫃,而後將保險櫃寄給對方。

中間人攻擊

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

這也就是至關於我有手機號,雖然是公開的,誰均可以給我打電話,可是剛開始你並不知道個人手機號,我須要將個人手機號發給你,在我發給你個人手機號的時候,被中間人攔截了,而後將我正確的手機號換成了錯誤的手機號,好比:110,而後,你收到的就是錯誤的手機號:110,可是你本身還不知道你收到的是錯的手機號,這時候,你要是給我打電話,就尷尬了~~

確認身份 —— 數字證書

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

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

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

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

數字簽名
數字簽名

數字簽名也就是至關於公證處在公證書上蓋章。

數字證書
數字證書

數字簽名和原始信息合在一塊兒稱爲數字證書,Bill 只需將數字證書發送給張大胖就能夠了。

在拿到數字證書以後,就用一樣的Hash 算法, 再次生成消息摘要,而後用CA的公鑰對數字簽名解密, 獲得CA建立的消息摘要, 二者一比,就知道有沒有人篡改了!

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

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

據說寫文章能夠得異步社區的書,異步社區做爲國內頂尖的IT專業圖書社區,它的書我很是想要,因此我竭力寫了這篇文章,我想要這本書(《Python極客項目編程》

你們若是以爲好給我點個贊吧
相關文章
相關標籤/搜索