計算機網絡學習之 Https 相關

計算機網絡學習之 Https 相關

1、前言

上一篇寫了關於 HTTP 相關的知識,還沒看的最好先去看下 計算機網絡學習之 http 相關css

其實 HTTPS 協議只是在 HTTP 的應用層中,多加了個 SSL/TLS 協議,對比圖以下:算法

也就是說 HTTPS = HTTP + SSL/TLS安全

這裏先有個大體的瞭解就行,接下來具體看下 HTTPS:服務器

2、HTTPS 簡介

爲何要使用 HTTPS?

HTTP 協議是不加密的,數據在傳輸中是明文的,存在被消息被篡改、被監聽、被僞造的可能,也就形成了潛在的安全隱患。網絡

爲了保證互聯網數據傳輸中的安全性,因此在 HTTP 協議中加入了一層 SSL/TLS 協議,就是如今咱們說的 HTTPS ,HTTPS 可以使數據在傳輸的過程當中是加密的,保證數據安全。dom

HTTP 和 HTTPS 的區別

  1. HTTP 數據明文傳輸,HTTPS 數據加密傳輸
  2. HTTP 不須要證書,HTTPS 須要申請 CA 證書
  3. HTTP 默認80端口,HTTPS 默認 443 端口
  4. HTTPS 比 HTTP 安全,由於比 HTTP 多了 SSL 層

SSL/TLS

SSL協議(Secure Sockets Layer)翻譯就是 安全套接字層,TLS(Transport Layer Security )是在 SSL 演變過程當中的生成的,也就是 TLS 是 SSL 的新版本。學習

客戶端和服務端在交互的過程當中,都要經過 TLS 層進行加密和解密,從而保證了數據的安全傳輸和完整傳輸。加密

SSL/TLS 也會進行握手操做,成爲 SSL 握手。SSl 握手是在 HTTP 三次握手之後進行的,因此 SSl 握手過程是不安全的,因此在這種狀況下就須要藉助數字證書來保證 SSL 握手的正確性,可是要注意的是,SSL/TLS 協議不只僅適用於 HTTP協議,是能夠用於任何應用層的協議的。.net

數字證書簡稱爲 CA,是由權威機構發佈的,也就是講數字證書是能夠被咱們所信賴的,若是要使用 HTTPS 的話,就須要去證書機構申請證書,大體流程以下:計算機網絡

  1. 公司向證書機構 CA 申請證書,並把本身服務器的公鑰交給證書機構
  2. CA 根據公司提供的信息,會決定要不要給其頒發證書,若是確認頒發證書,就把公司的公鑰放入證書之中,而且用本身的私鑰進行加密,交給服務器。
  3. 而後客戶端在完成三次握手之後會和服務器進行 SSL 握手,拿到服務器返回的證書進行校驗,經過後才能夠進行加密傳輸。

3、HTTPS 握手過程

1.Client Hello

第一次客戶端經過 Client Hello 消息把隨機數(稱爲 Random1)、Session ID 支持的加密算法發送給服務器

2.Server Hello

服務器肯定好定本次通訊採用的SSL版本和加密算法,若是服務器容許客戶端在之後的通訊中重用本次會話,則服務器會爲本次會話分配會話ID,生成服務器的隨機數 (稱爲 Random2)最終都經過 Server Hello 發送給客戶端

3.Certificate, Certificate Status, Server Key Exchange, Server Hello Done

這步的主要做用就是吧把證書等信息發送給客戶端。

4.Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message

-w1345

Client Key Exchange 是在校驗經過之後,客戶端又生成一個隨機數(Random 3),利用證書中的公鑰對其進行加密,告訴服務端。

這個時候客戶端已經有Random一、Random二、Random3三個隨機數。

Change Cipher Spec 客戶端發送消息,通知服務器後續報文將採用協商好的密鑰和加密套件進行通訊 。

Encrypted Handshake Message 客戶端計算已交互的握手消息(除Change Cipher Spec消息外全部已交互的消息)的 Hash 值,利用協商好的密鑰和加密算法處理 Hash 值(計算並添加MAC值、加密等),並經過 Encrypted Handshake Message 消息發送給 服務器。服務器利用一樣的方法計算已交互的握手消息的Hash值,並與 Encrypted Handshake Message 消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。

5.Change Cipher Spec, Encrypted Handshake Message

-w1336
服務器經過本身的私鑰對客戶端傳來的數據進行解密,獲得 Random3。

這樣服務端也有Random一、Random二、Random3三個隨機數。 這個時候客戶端和服務端都有Random一、Random二、Random3三個隨機數,而後服務器發送Change Cipher Spec消息,通知客戶端後續報文將採用協商好的密鑰和加密套件進行通訊。

Encrypted Handshake Message 服務器計算已交互的握手消息的Hash值,利用協商好的密鑰和加密套件處理Hash值(計算並添加MAC值、加密等),並經過 Encrypted Handshake Message 消息發送給客戶端。客戶端利用一樣的方法計算已交互的握手消息的Hash值,並與Encrypted Handshake Message消息的解密結果比較,若是兩者相同,且MAC值驗證成功,則證實密鑰和加密套件協商成功。

經過上面的步驟,客戶端和服務端都使用 Random一、Random二、Random3三個隨機數 根據商定好的規則,生成對稱祕鑰(master secret),各自保存在本地,用該祕鑰加密接下來的數據。

6.正常通訊

-w1345

前面完成了 SSL 握手操做,這裏就能夠利用剛纔協商好的祕鑰進行數據的加密傳輸。

4、最後

HTTP 相關的知識就先了解這麼多,先大致知道是個什麼樣的流程,後面有空再深刻的研究吧。

參考 1 參考 2

歡迎關注個人公衆號:

個人公衆號
相關文章
相關標籤/搜索