1. 程式人生 > >區塊鏈100講:HTTPS協議的原理及其與HTTP協議的區別

區塊鏈100講:HTTPS協議的原理及其與HTTP協議的區別

image

1

HTTPS協議是什麼

https協議比http協議多了一個s,字面意思上s=secure(安全)。它跟http協議一樣都是應用層協議,都是工作在TCP協議之上。

只不過https協議在傳輸過程中的資料都是經過了加密。本質上HTTPS協議就是在TCP協議之上又加了一層SSL協議來實現了加密這個操作(不準確的說HTTPS就就是披著是SSL的皮的HTTP協議)

2

HTTPS和HTTP的區別

  • HTTP協議工作在80埠,HTTPS協議工作在443埠

  • HTTPS需要申請證書(用於驗證伺服器身份)

  • HTTP在TCP三次握手建立連線之後即可開始傳輸資料;HTTPS協議則需要在建立TCP連線之後客戶端與伺服器在進行SSL加密,確定對話金鑰,完成加密後才開始傳輸資料。

  • HTTPS協議傳輸是密文,HTTP協議傳輸是明文

大致的區別就以上4點,其實最主要的就是SSL協議加密對話產生對話金鑰的過程。

在瞭解具體的SSL協議之前,先要了解兩個加密概念

3

對稱加密

同一個金鑰可以同時用作資訊的加密和解密,這種加密方法稱為對稱加密,也被叫做共享金鑰加密。這種方法在網路傳輸中有個問題,就是如何把金鑰安全的交付給對方,因為http協議是明文傳輸(https協議在建立ssl加密時都是明文傳輸),所以金鑰很容易被監聽擷取,從而失去金鑰本身的意義了。

公開金鑰加密

假設使用者為服務端,服務端有兩個金鑰,一個是私鑰(只能自己悄悄咪咪看的,可以比喻成鑰匙),一個是公鑰(隨便哪個看的都行,可以比喻成鎖頭)。服務端將公鑰發給客戶端,客戶端使用公鑰對要傳送的資訊進行加密,然後傳送給伺服器(用鎖頭把資料鎖在箱子裡),由於該資訊是通過服務端的公鑰進行加密的,只有服務端使用自己的私鑰才能解析出來(用鑰匙開啟鎖頭,獲取資訊)。因為私鑰是一直保持在服務端,而又只有私鑰才能解析出公鑰加密的內容,所以通過該種方法實現了資料的安全傳輸。

但是由於每次都要使用私鑰去解析公鑰,才能獲取到資料,如果公鑰很長的話,其中的運算量會很大,佔用CPU效能,從而使得網路延遲加大。

HTTPS協議同時使用了這兩種方式,即先通過公開金鑰加密的方式產生一個對話金鑰,在使用對話金鑰進行對稱加密的方式傳輸資料。

SSL協議

  • 客戶端向伺服器傳送請求
    請求中包含

支援的SSL協議版本
客戶端生成的隨機數(第一個隨機數)
支援的加密方法
支援的壓縮方法

  • 伺服器接收到客戶端請求,並且向客戶端傳送響應

    響應包括

確認協議版本
伺服器生產的隨機數(第二個隨機數)
確定加密的方法
伺服器的證書(伺服器的公鑰在裡面)

  • 客戶端接收到請求,對證書進行校驗(校驗證書的頒佈機構,證書中的域名和實際域名是否一致,證書是否過期,如果不符合,瀏覽器會顯示警告),如果通過了校驗,客戶端將會發送回應

    請求包括

客戶端生成一個隨機數,並且該隨機數通過伺服器的公鑰進行加密(第三個隨機數)
編碼改變通知(表示之後的通訊都會通過雙方商定的加密演算法進行通訊)
客戶端握手結束通知,表示客戶端的握手階段已經結束。這一項同時也是前面傳送的所有內容的hash值,用來供伺服器校驗。

  • 伺服器接收到最後的迴應之後,使用伺服器的私鑰來解析出客戶端傳送過來的第三個隨機數,並且使用與客戶端約定好的加密演算法將一共三個隨機數生成對話金鑰。伺服器返回響應

編碼改變通知(表示之後的通訊都會通過雙方商定的加密演算法進行通訊)
伺服器握手結束通知,表示伺服器的握手階段已經結束。這一項同時也是前面傳送的所有內容的hash值,用來供客戶端校驗。

整個SSL協議的加密過程大致就是這樣,加密對話的過程都是明文傳輸的(因為HTTPS還沒帶搭建起來的嘛)。

整個加密過程的核心就是客戶端與伺服器產生的三個隨機數,這三個隨機數是用於產生後續資料傳輸的加密金鑰的。從上面的過程可以看出,這三個隨機數都是可以別竊取的,但是由於第三個隨機數使用了伺服器的公鑰進行了公開金鑰加密傳輸,理論上只有使用伺服器的私鑰才能解析出第三個隨機數。所以最後使用這三個隨機數生成的對話私鑰是安全的,之後的資料傳輸都會使用這個對話私鑰進行加密(對稱加密),從而保證了傳輸的安全性又保證了資料傳輸的效率。

本文作者:摘片葉子

原文釋出於簡書

以下是我們的社群介紹,歡迎各種合作、交流、學習:)

image