這篇文章首發於個人我的網站:據說 - https://tasaid.com/,建議在個人我的網站閱讀,擁有更好的閱讀體驗。html
這篇文章與 博客園 和 Segmentfault 共享。前端
前端開發QQ羣:377786580git
HTTPS是互聯網 web 大勢所趨。各大網站都已陸續部署了HTTPS,這篇文章咱們來探討什麼是HTTPS以及爲何要部署HTTPS。web
這篇文章收錄在《Said - 從HTTP到HTTPS》系列:算法
當你在瀏覽器輸入一個網址 (例如 http://tasaid.com)的時候,瀏覽器發起一個 HTTP 請求,帶着請求信息 (參見 HTTP Headers),鏈接到服務器,把請求信息遞給服務器,服務器收到信息以後,解析相關的信息,而後進行處理,再返回瀏覽器請求的數據。瀏覽器
簡單來講是這麼一個流程:安全
看圖說話:服務器
這其中有個問題,瀏覽器爸爸和服務器都沒有驗證清單信息的有效性和對方的身份。萬一有人在中間把線程小哥攔下來,暴揍一頓,而後把物品清單給換了怎麼辦?或者有人把線程小哥在半路上暴揍一頓,拿了清單換了另一個小哥怎麼辦?併發
這是個很嚴肅的問題:假如服務器要把一些東西鎖在櫃子裏,須要小明給密碼才能夠打開櫃子。而後小明把密碼寫在清單上讓瀏覽器爸爸交給服務器。這時候,若是這張清單被人攔截下來,不就獲得了小明的密碼?性能
簡單來講,傳輸的信息中包含用戶密碼,被攔截了怎麼辦?
正由於HTTP請求有這些安全性的問題,因此HTTPS誕生了,致力於解決了這些安全性問題,咱們進行一下對比:
安全性 | HTTP | HTTPS |
---|---|---|
竊聽風險 | 傳遞的信息是明文的,可能會被有心人攔截下來竊聽 | 信息加密傳播 |
篡改風險 | 傳遞的信息可能會被篡改 | 信息校驗,一旦被篡改馬上就會被發現 |
假裝風險 | 沒有驗證通訊另一頭對方的身份,可能遭遇假裝 | 身份校驗 |
那麼HTTPS是如何作到更安全的呢?
簡單來講,HTTPS 便是在 HTTP 下加入了一層 SSL 加密,因此被稱爲HTTPS。具體的加密過程則是 公匙加密法:
公匙密碼和算法都是公開的,而私匙則是保密的。加密使用的公匙和解碼使用的密匙都是不相同的,所以這是一個 非對稱加密 算法。
說起 HTTPS ,就會聽到你們說須要證書才能部署,那麼什麼是證書呢?
由於互聯網不安全,公匙也是信息的一部分,也是會有被篡改的風險的。因此引入了互聯網權威機構 - CA 機構,又稱爲證書受權 (Certificate Authority) 機構,瀏覽器會內置這些"受信任的根證書頒發機構" (即 CA)。
服務端向權威的身份鑑定 CA 機構申請數字證書,CA 機構驗證了網站以後,會把網站錄入到內部列表,採用 Hash 把服務端的一些相關信息生成摘要,而後 CA 機構用本身的私匙,把服務端的公匙和相關信息一塊兒加密,而後給申請證書的服務端頒發數字證書,用於其餘客戶端 (好比瀏覽器) 認證這個網站的公匙。
客戶端經過服務端下發的證書,找到對應的 CA,而後向 CA 驗證這個證書是否有效,CA 驗證經過以後,下發服務端的公匙。
由於 CA 是權威而且可信的,因此客戶端 (瀏覽器) 信任 CA,而 CA 又信任通過認證的服務端 ,因此客戶端 (瀏覽器) 也信任這個服務端,這就是信任鏈 (Chain Of Trust)。
而 CA 頒發的數字證書,通常包含這些信息:
簡單來講:爲了保證公匙是安全的,因此經過數字證書驗證公匙。
一條完整的HTTPS請求應該是這樣的:
見下圖:
這篇文章首發於個人我的網站:據說 - https://tasaid.com/,建議在個人我的網站閱讀,擁有更好的閱讀體驗。
這篇文章與 博客園 和 Segmentfault 共享。
前端開發QQ羣:377786580