1. 程式人生 > >HTTP與HTTPS的理解

HTTP與HTTPS的理解

最近一直也在面試的過程中,可能由於各個方面的問題,導致沒有時間抽出更新部落格,今天開始陸續更新!!!以後自己的部落格,會向React Native,swift ,以及H5延展,成為一個全棧的技術人員。本篇將講述HTTP與HTTPS的主要區別以及HTTPS裡面到底如何操作的,大約需要15-20分鐘左右。

 

一、HTTP

HTTP:超文字傳輸協議(HyperText Transfer Protocol)是一種用於分散式、協作式的應用層協議。最初的HTTP用於提供一種釋出和接收html頁面的方法,是一種明文傳輸,埠是80。

 

二、HTTPS與HTTP的區別

1. HTTP的URL以http://”開始,並且預設埠號為80;而HTTPS的URL以“https://”開始,並且預設埠為443。

2. HTTP協議執行在TCP之上,所有的傳輸內容都是明文,客戶端和服務端都不需要對方的身份;HTTPS是執行在SSL/TLS之上的HTTP,所有的傳輸內容都會經過加密,加密採用的是對稱加密,但對稱加密的金鑰用伺服器方的證書進行了非對稱加密。

1)對稱加密:金鑰是隻有一個,加密解密也為同一個密碼,並且加解密速度快,我們使用典型的對稱加密演算法有DES、AES等;

2)非對稱加密: 首先金鑰是成對出現(公鑰無法推算出私鑰,私鑰也無法推出公鑰),加密解密使用不同的金鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密),相對對稱加密而言速度較慢,我們使用典型的非對稱加密演算法有RSA、DSA等

 

三、HTTPS

1.為什麼HTTPS採用混合加密機制?

為什麼不單獨採取非對稱加密?因為非對稱加密要比對稱加密的方式更復雜,所以應該充分利用兩者的優勢。用非對稱的方式來安全傳輸對稱加密的金鑰,而建立通訊交換報文階段就使用對稱加密的方式。

 

2.HTTPS驗證流程

(1)客戶端發起HTTPS的請求,把自身支援的SSL的指定版本,通過加密演算法傳送服務端;

(2)服務端收到後會與自身支援的做對比,如果不支援則連線就會斷開,反之則會從中選中一種加密演算法和雜湊演算法以證書的形式返回客戶端,證書中就包含了公鑰、頒發機構,失效日期和網址等等;

(3)客戶端收到伺服器響應後做以下的幾件事:

  • 驗證證書合法性

  頒發證書的機構是否過期和合法,以及網址是否與正在訪問地址一致等,證書驗證通過後,瀏覽器位址列中會加上小鎖

  • 生成隨機密碼

  如果證書通過驗證(或者使用者接受了不授信的證書)這時瀏覽器會生成一串隨機數,然後用證書中的公鑰進行加密。

  • Hash握手資訊

  用最開始約定的Hash方式,把握手訊息進行取Hash值,然後通過隨機數加密“握手訊息+握手訊息Hash值(簽名)",最後一起傳送給伺服器

(4)伺服器得到客戶端傳來的密文,用自己的私鑰來解密握手資訊取出隨機數密碼,然後再用隨機數密碼來解密握手訊息與Hash值,並與傳過來的Hash值進行對比確認是否一致。然後用隨機密碼加密一段握手訊息發給客戶端。

(5)客戶端用隨機數解密並且計算握手訊息的Hash,如果與伺服器發來的Hash一致,此時握手的過程就會結束。之後所有的通訊資料都會由於先前的瀏覽器生成的隨機密碼並用對稱加密演算法進行加密(因為密碼只有客戶端和服務端知道,即使被攔截也是沒有辦法解密資料的,保證了通訊的安全)

 

四、HTTPS總結

HTTPS要通訊過程得到安全保證,必須使用對稱加密演算法,但是協商對稱加密加密演算法時,需要採用非對稱加密演算法來保證安全,然後直接使用非對稱加密的過程本身也不是很安全,因為可能會有中間人篡改公鑰的可能性,所以客戶端和伺服器不直接使用公鑰,採取的是數字證書籤發機構頒發的證書來保證非對稱加密過程的安全。從而保證了通訊的安全問題。