白話Https

本文試圖以通俗易通的方式介紹Https的工做原理,不糾結具體的術語,不考證嚴格的流程。我相信弄懂了原理以後,到了具體操做和實現的時候,方向就不會錯,而後條條大路通羅馬。閱讀文本須要提早大體瞭解對稱加密、非對稱加密、信息認證等密碼學知識。若是你不太瞭解,能夠閱讀Erlang發明人Joe Armstrong最近寫的Cryptography Tutorial。大牛出品,通俗易懂,強力推薦。git

Https涉及到的主體

  1. 客戶端。一般是瀏覽器(Chrome、IE、FireFox等),也能夠本身編寫的各類語言的客戶端程序。
  2. 服務端。通常指支持Https的網站,好比github、支付寶。
  3. CA(Certificate Authorities)機構。Https證書籤發和管理機構,好比Symantec、Comodo、GoDaddy、GlobalSign。

下圖裏我畫出了這幾個角色:
Https Rolegithub

發明Https的動機

  1. 認證正在訪問的網站。什麼叫認證網站?好比你正在訪問支付寶,怎樣肯定你正在訪問的是阿里巴巴提供的支付寶而不是假冒僞劣的釣魚網站呢?
  2. 保證所傳輸數據的私密性和完整性。衆所周知,Http是明文傳輸的,因此處在同一網絡中的其它用戶能夠經過網絡抓包來竊取和篡改數據包的內容,甚至運營商或者wifi提供者,有可能會篡改http報文,添加廣告等信息以達到盈利的目的。

Https的工做流程

這一節經過介紹Https協議的工做流程,來講明Https是如何達成本身的兩個目的的。下圖我畫出了Https的工做流程,注意,這只是原理示意圖,並非詳細的協議解析。瀏覽器

Https Flow

能夠看到工做流程,基本分爲三個階段:安全

  1. 認證服務器。瀏覽器內置一個受信任的CA機構列表,並保存了這些CA機構的證書。第一階段服務器會提供經CA機構認證頒發的服務器證書,若是認證該服務器證書的CA機構,存在於瀏覽器的受信任CA機構列表中,而且服務器證書中的信息與當前正在訪問的網站(域名等)一致,那麼瀏覽器就認爲服務端是可信的,並從服務器證書中取得服務器公鑰,用於後續流程。不然,瀏覽器將提示用戶,根據用戶的選擇,決定是否繼續。固然,咱們能夠管理這個受信任CA機構列表,添加咱們想要信任的CA機構,或者移除咱們不信任的CA機構。服務器

  2. 協商會話密鑰。客戶端在認證完服務器,得到服務器的公鑰以後,利用該公鑰與服務器進行加密通訊,協商出兩個會話密鑰,分別是用於加密客戶端往服務端發送數據的客戶端會話密鑰,用於加密服務端往客戶端發送數據的服務端會話密鑰。在已有服務器公鑰,能夠加密通信的前提下,還要協商兩個對稱密鑰的緣由,是由於非對稱加密相對複雜度更高,在數據傳輸過程當中,使用對稱加密,能夠節省計算資源。另外,會話密鑰是隨機生成,每次協商都會有不同的結果,因此安全性也比較高。網絡

  3. 加密通信。此時客戶端服務器雙方都有了本次通信的會話密鑰,以後傳輸的全部Http數據,都經過會話密鑰加密。這樣網路上的其它用戶,將很難竊取和篡改客戶端和服務端之間傳輸的數據,從而保證了數據的私密性和完整性。網站

使用Https的流程

若是你是一個服務器開發者,想使用Https來保護本身的服務和用戶數據安全,你能夠按照如下流程來操做。加密

CA Flow

總結

  1. 說是討論Https,事實上Https就是Http跑在SSl或者TLS上,因此本文討論的原理和流程實際上是SSL和TLS的流程,對於其它使用SSL或者TLS的應用層協議,本文內容同樣有效。
  2. 本文只討論了客戶端驗證服務端,服務端也能夠給客戶端頒發證書並驗證客戶端,作雙向驗證,但應用沒有那麼普遍,原理相似。
  3. 因爲採用了加密通信,Https無疑要比Http更耗費服務器資源,這也是不少公司明明支持Https卻默認提供Http的緣由。
相關文章
相關標籤/搜索