HTTPS是如何保證安全的

HTTP存在的問題

  1. 竊聽風險:通訊使用明文(不加密),內容可能會被竊聽(第三方可能獲知通訊內容)
  2. 冒充風險:不驗證通訊方的身份,所以有可能遭遇假裝
  3. 篡改風險:沒法證實報文的完整性,因此有可能已遭篡改

HTTPS

HTTPS網站

能夠看到 HTTPS的網站,在瀏覽器的地址欄內會出現一個帶鎖的標記。html

HTTPS並不是是應用層一個新的協議,一般 HTTP 直接和 TCP 通訊,HTTPS則先和安全層(SSL/TLS)通訊,而後安全層再和 TCP 層通訊。git

HTTPS

SSL/TLS協議就是爲了解決上面提到的HTTP存在的問題而生的,下面咱們來看一下它是怎麼解決的:瀏覽器

  1. 全部的信息都是加密傳輸的,第三方沒法竊聽
  2. 配備身份驗證,防止身份被冒充
  3. 具備校驗機制,一旦被篡改,通訊雙方會馬上發現

加密

對稱加密

加密和解密同用一個祕鑰的方式稱爲 共享祕鑰加密,也被叫作對稱祕鑰加密。安全

對稱加密

  • 瀏覽器發送給服務端 client_random 和一系列加密方法
  • 服務端發送給瀏覽器 server_random和加密方法

現有瀏覽器和服務器有了三個相同的憑證:client_randomserver_random和加密方法 用加密方法把 client_randomserver_random 兩個隨機數混合起來,生成祕鑰,這個密鑰就是瀏覽器和服務端通訊的暗號。服務器

存在的問題:第三方能夠在中間獲取到client_randomserver_random和加密方法,因爲這個加密方法同時能夠解密,因此中間人能夠成功對暗號進行解密,拿到數據,很容易就將這種加密方式識破了。dom

非對稱加密

非對稱加密

  • 瀏覽器發送給服務端 一系列加密方法
  • 服務端發送給瀏覽器 加密方法以及公鑰

以後瀏覽器經過公鑰將數據加密傳輸給服務端,服務端收到數據使用私鑰進行解密。服務端給瀏覽器發送數據,則使用私鑰進行加密,瀏覽器收到服務端發送過來的數據,使用公鑰進行解密。post

存在的問題:網站

  1. 非對稱加密效率過低, 這會嚴重影響加解密的速度,進而影響到用戶打開頁面的速度。
  2. 沒法保證服務器發送給瀏覽器的數據安全, 服務器的數據只能用私鑰進行加密(由於若是它用公鑰那麼瀏覽器也無法解密啦),中間人一旦拿到公鑰,那麼就能夠對服務端傳來的數據進行解密了,就這樣又被識破了。

HTTPS使用對稱加密和非對稱加密結合

傳輸數據階段依然使用對稱加密,可是對稱加密的祕鑰咱們採用非對稱加密傳輸。加密

HTTPS加密

  • 瀏覽器向服務器發送client_random和加密方法列表。
  • 服務器接收到,返回server_random、加密方法以及公鑰。
  • 瀏覽器接收,接着生成另外一個隨機數pre_master, 而且用公鑰加密,傳給服務器。(重點操做!)
  • 服務器用私鑰解密這個被加密後的pre_master。

到此爲止,服務器和瀏覽器就有了相同的 client_randomserver_randompre_master, 而後服務器和瀏覽器會使用這三組隨機數生成對稱祕鑰。有了對稱祕鑰以後,雙方就可使用對稱加密的方式來傳輸數據了。code

CA (數字證書)

使用對稱和非對稱混合的方式,實現了數據的加密傳輸。可是這種仍然存在一個問題,服務器多是被黑客冒充的。這樣,瀏覽器訪問的就是黑客的服務器,黑客能夠在本身的服務器上實現公鑰和私鑰,而對瀏覽器來講,它並不徹底知道如今訪問的是這個是黑客的站點。

服務器須要證實本身的身份,須要使用權威機構頒發的證書,這個權威機構就是 CA(Certificate Authority), 頒發的證書就稱爲數字證書 (Digital Certificate)。

對於瀏覽器來講,數字證書有兩個做用:

  1. 經過數字證書向瀏覽器證實服務器的身份
  2. 數字證書裏面包含了服務器公鑰

下面咱們來看一下含有數字證書的HTTPS的請求流程

含有數字證書的HTTPS的請求流程

相對於不含數字證書的HTTPS請求流程,主要如下兩點改動

  1. 服務器沒有直接返回公鑰給瀏覽器,而是返回了數字證書,而公鑰正是包含數字證書中的;
  2. 在瀏覽器端多了一個證書驗證的操做,驗證了證書以後,才繼續後序流程。

參考

相關文章
相關標籤/搜索