HTTPS原理以及流程

1、HTTP和HTTPS的區別算法

  HTTP協議傳輸的數據都是未加密的,也就是明文的,所以使用HTTP協議傳輸隱私信息很是不安全。瀏覽器

  HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。安全

    HTTPS的缺點:服務器

  • 由於與純文本通訊相比,加密通訊會消耗更多的CPU 及內存資源。若是每次通訊都加密,會消耗至關多的資源.
  • 要進行 HTTPS通訊,證書是必不可少的。而使用的證書必須向認證機構(CA)購買。

2、密碼學基礎網絡

  • 明文

  明文指的是未被加密過的原始數據。大數據

  • 密文

  明文被某種加密算法加密以後,會變成密文,從而確保原始數據的安全。密文也能夠被解密,獲得原始的明文。網站

  • 密鑰

  密鑰是一種參數,它是在明文轉換爲密文或將密文轉換爲明文的算法中輸入的參數。加密

  密鑰分爲對稱密鑰與非對稱密鑰,分別應用在對稱加密和非對稱加密上。spa

  • 對稱加密

  對稱加密又叫作私鑰加密,即信息的發送方和接收方使用同一個密鑰去加密和解密數據操作系統

  對稱加密的特色是算法公開、加密和解密速度快,適合於對大數據量進行加密,常見的對稱加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。

  加密過程以下:明文 + 加密算法 + 私鑰 => 密文
  解密過程以下:密文 + 解密算法 + 私鑰 => 明文

  其加密過程當中的私鑰與解密過程當中用到的私鑰是同一個密鑰,這也是稱加密之因此稱之爲「對稱」的緣由。因爲對稱加密的算法是公開的,因此一旦私鑰被泄露,那麼密文就很容易被破解,因此對稱加密的缺點是密鑰安全管理困難。

  • 非對稱加密

  而非對稱加密使用一對密鑰,即公鑰和私鑰,且兩者成對出現

   私鑰被本身保存,不能對外泄露。公鑰指的是公共的密鑰,任何人均可以得到該密鑰。用公鑰或私鑰中的任何一個進行加密,用另外一個進行解密。

  被公鑰加密過的密文只能被私鑰解密,過程以下:

  明文 + 加密算法 + 公鑰 => 密文, 密文 + 解密算法 + 私鑰 => 明文
  被私鑰加密過的密文只能被公鑰解密,過程以下:
  明文 + 加密算法 + 私鑰 => 密文, 密文 + 解密算法 + 公鑰 => 明文
  因爲加密和解密使用了兩個不一樣的密鑰,這就是非對稱加密「非對稱」的緣由。
  非對稱加密的缺點是加密和解密花費時間長、速度慢,只適合對少許數據進行加密。在非對稱加密中使用的主要算法有:RSA、Elgamal、Rabin、D-H、ECC(橢圓曲線加密算法)等。

3、
HTTPS通訊過程
    HTTPS協議 = HTTP協議 + SSL/TLS協議,在HTTPS數據傳輸的過程當中,須要用SSL/TLS對數據進行加密和解密,須要用HTTP對加密後的數據進行傳輸,由此能夠看出HTTPS是由HTTP和SSL/TLS一塊兒合做完成的。
   SSL的全稱是Secure Sockets Layer,即安全套接層協議,是爲網絡通訊提供安全及數據完整性的一種安全協議。SSL協議在1994年被Netscape發明,後來各個瀏覽器均支持SSL,其最新的版本是3.0。

  TLS的全稱是Transport Layer Security,即安全傳輸層協議,最新版本的TLS(Transport Layer Security,傳輸層安全協議)是IETF(Internet Engineering Task Force,Internet工程任務組)制定的一種新的協議,它創建在SSL 3.0協議規範之上,是SSL 3.0的後續版本。在TLS與SSL3.0之間存在着顯著的差異,主要是它們所支持的加密算法不一樣,因此TLS與SSL3.0不能互操做。雖然TLS與SSL3.0在加密算法上不一樣,可是在咱們理解HTTPS的過程當中,咱們能夠把SSL和TLS看作是同一個協議

    HTTPS爲了兼顧安全與效率,同時使用了對稱加密和非對稱加密數據是被對稱加密傳輸的,對稱加密過程須要客戶端的一個密鑰,爲了確保能把該密鑰安全傳輸到服務器端,採用非對稱加密對該密鑰進行加密傳輸,總的來講,對數據進行對稱加密,對稱加密所要使用的密鑰經過非對稱加密傳

 

    HTTPS在傳輸的過程當中會涉及到三個密鑰:

  服務器端的公鑰和私鑰,用來進行非對稱加密;

  客戶端生成的隨機密鑰,用來進行對稱加密。

  一個HTTPS請求實際上包含了兩次HTTP傳輸,能夠細分爲如下幾步

  1.客戶端向服務器發起HTTPS請求,鏈接到服務器的443端口。

  服務器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務器端保存着私鑰,不能將其泄露,公鑰能夠發送給任何人。

  服務器將本身的公鑰發送給客戶端

  2.客戶端收到服務器端的公鑰以後,會對公鑰進行檢查,驗證其合法性,若是發現發現公鑰有問題,那麼HTTPS傳輸就沒法繼續。嚴格的說,這裏應該是驗證服務器發送的數字證書的合法性。

  若是公鑰合格,那麼客戶端會生成一個隨機值,這個隨機值就是用於進行對稱加密的密鑰,咱們將該密鑰稱之爲client key,即客戶端密鑰。而後客戶端用服務器的公鑰對客戶端密鑰進行非對稱加密,這樣客戶端密鑰就變成密文了,至此,HTTPS中的第一次HTTP請求結束。

  3.客戶端會發起HTTPS中的第二個HTTP請求,將加密以後的客戶端密鑰發送給服務器
  服務器接收到客戶端發來的密文以後,會用本身的私鑰對其進行非對稱解密,解密以後的明文就是客戶端密鑰,而後用客戶端密鑰對數據進行對稱加密,這樣數據就變成了密文。

  而後服務器將加密後的密文發送給客戶端

  客戶端收到服務器發送來的密文,用客戶端密鑰對其進行對稱解密,獲得服務器發送的數據。這樣HTTPS中的第二個HTTP請求結束,整個HTTPS傳輸完成。

  4.在接下來的傳輸過程當中,客戶端和服務器都使用對稱加密的密鑰進行對稱加解密

備註:前3步都屬於握手階段,到第4步才真正進入內容傳輸階段。之因此到傳輸階段選擇使用對稱加密的方式是由於對稱加密的方式執行快。

  注意⚠️: 證實公鑰的正確性的方法:使用由數字證書認證機構(CA,Certificate Authority)和其相關機關頒發的公開密鑰證書

 4、驗證公鑰

  瀏覽器在整個通訊的最開始會請求服務器的公鑰(實際上是證書),這裏的公鑰就是咱們常說的 SSL 證書的一部分了。

  關於 SSL 證書,通常是由專門機構(CA 機構)頒發,其實也就是頒發幾個文件,其中有包含私鑰信息的文件和包含公鑰信息的文件,私鑰文件一直祕密地保存在服務器,不會公佈出去,公鑰文件會在此次請求中下發給瀏覽器

公鑰文件除了包含有公鑰密鑰信息外,還有其餘信息好比域名、頒發機構、有效期等等。

  好比百度首頁的證書信息以下圖所示:

  每個證書都包含域名信息,操做系統也維護了一個可信的證書列表。當客戶端得到服務器返回的證書後,提取證書裏的域名、簽發機構等信息,而後根據本地的可信證書列表判斷該證書是否可信,而後才提取證書裏的公鑰並接着和服務器通訊,不然給出警告。

通常來講,高質量的 SSL 證書須要購買,並且價格不菲。若是對站點的要求沒有那麼高,也能夠在一些網站上申請免費證書,好比SSL證書選購 - 騰訊雲、SSL For Free。
相關文章
相關標籤/搜索