區塊鏈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加密時都是明文傳輸),因此密鑰很容易被監聽截取,從而失去密鑰自己的意義了。加密

公開密鑰加密ssl

假設使用者爲服務端,服務端有兩個密鑰,一個是私鑰(只能本身悄悄咪咪看的,能夠比喻成鑰匙),一個是公鑰(隨便哪一個看的都行,能夠比喻成鎖頭)。服務端將公鑰發給客戶端,客戶端使用公鑰對要發送的信息進行加密,而後發送給服務器(用鎖頭把數據鎖在箱子裏),因爲該信息是經過服務端的公鑰進行加密的,只有服務端使用本身的私鑰才能解析出來(用鑰匙打開鎖頭,獲取信息)。由於私鑰是一直保持在服務端,而又只有私鑰才能解析出公鑰加密的內容,因此經過該種方法實現了數據的安全傳輸。

可是因爲每次都要使用私鑰去解析公鑰,才能獲取到數據,若是公鑰很長的話,其中的運算量會很大,佔用CPU性能,從而使得網絡延遲加大。

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

SSL協議

  • 客戶端向服務器發送請求 請求中包含

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

  • 服務器接收到客戶端請求,而且向客戶端發送響應

    響應包括

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

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

    請求包括

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

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

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

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

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

本文做者:摘片葉子

原文發佈於簡書

如下是咱們的社區介紹,歡迎各類合做、交流、學習:)

image

相關文章
相關標籤/搜索