Http 協議是明文通訊,數據在通訊鏈路上可能會被劫持或者篡改算法
既然數據存在被暴露的風險,咱們想到的第一個方案可能就是對數據進行加密瀏覽器
咱們使用對稱加密的方式來加密登陸信息此時若是被劫持了的話,劫持者沒有對稱密匙,那麼他就沒法解密和篡改你的信息。可是因爲對稱密匙也是明文發佈的,這個密匙若是也被劫持者劫持的話,那麼劫持者仍是能夠竊取和篡改你傳輸的數據 安全
對稱加密它的優勢是它的加密解密速度快服務器
考慮到對稱加密用單個密匙加解密會存在暴露的風險,咱們將密匙分爲 2 個,保存在服務端私有的叫作私有密匙,發送給客戶端的叫作公有密匙。tcp
私有密匙只保存服務端是安全的,公有密匙明文暴露給全部客戶端或者劫持者都能拿到加密
咱們使用公鑰進行加密,私鑰進行解密,此時由於劫持者沒有私鑰,他就沒法修改客戶端傳來的數據,也沒法解密這個數據 操作系統
這樣確實是保證了客戶端發送對服務端的數據的安全,可是服務端若是要返回給客戶端數據呢?客戶端但是沒有私鑰進行解密的,根據對稱加密中的講解咱們知道把祕鑰放在客戶端是不安全的,因此這種方式也不可行3d
非對稱加密比較安全,可是他的加解密複雜度相對較高比對稱加密慢多了cdn
對稱加密加解密效率高,非對稱加密安全性強,咱們綜合兩者來進行加密的方式就叫作混合加密 blog
這樣複雜的非對稱加密只會在最開始解析一次,後面就使用效率高的對稱加密。可是這還有一個問題就是,服務器下發的公鑰是明文可能被任何人獲取到的,好比這樣
到這一步咱們就會發現只須要保證客戶端接收到的公鑰確實是服務器下發的就能解決安全問題,由此咱們引出了 HTTPS,HTTPS 就能夠看作是一種混合加密可是他保證了公鑰的安全
HTTPS 是一種加密的 HTTP 協議,它在 HTTP 傳輸協議 tcp 基礎上增長了一層 SSL 層也叫做 TLS 層用於構建加密的傳輸信道
HTTPS 的認證方式有 2 中分別爲單向認證和雙向認證,咱們這裏來聊聊單向認證,雙向認證其實就是反過來驗證而已,好比單向認證是客戶端須要去認證服務端是否真實,雙向認證就是服務端也須要去認證客戶端是否真實
操做系統和瀏覽器會內置一些權威機構頒發的證書和其公鑰信息
在客戶端內置 CA 機構證書以及公鑰,經過證書 hash 算法去 hash 公鑰解密數據獲得後的數據就會和從服務器獲得證書的 hash 值不一致,也就是檢查出了證書被篡改
服務器下發的證書是用於證實本身的身份的,好比咱們的請求被中間人截胡了它返回的證書等信息給客戶端,在客戶端在內置的 CA 機構中沒法找到,此時它的身份識別錯誤,可是若是咱們不當心誤安裝了中間人頒發的根證書,那麼它就能夠識別和篡改咱們發送的信息。
好比咱們知道 Charles 能夠經過安裝其根證書來抓包 HTTPS 數據