年後回來後加班嚴重,最近出差一個月而且還是997,沒時間更新文章了。

今天來說一下:https的原理以及數字證書籤名的原理。本章知識涉及到加密解密方面的知識,不懂的可以去翻一下我之前的文章。

一、http的不足之處

http在傳輸過程中,是很容易出現問題的:

  1. 竊聽。http在傳輸過程中,使用http抓包等工具之類的可以獲取http信息,由於數據未加密,明文傳輸的,則會被其他人竊聽。
  2. 身份偽裝。「QQ聊天是複雜的,你永遠不知道對面跟你聊天的是人還是狗」,當年qq很火的那個時代,一句話道進了網路的複雜。http請求的雙方是不會對對方進行身份校驗的,你根本無法確認對面是誰調用你的介面。
  3. 數據篡改。http不會檢驗數據的前後一致性,一旦數據被監聽,有人會冒充請求發送方,發送篡改的數據。

二、SSL/TSL協議的解決方案

SSL通常是指SLL和TSL,TSL是在SSL上進行了包裝,本質上他們是一樣的,通常HTTPS 是HTTP+SSL 或者HTTP+TSL;SSL主要針對HTTP存在的三個問題逐一實現了對應的解決方案:

1、通信加密(解決數據竊聽問題)

雙方建立安全的訪問渠道(使用混合加密的方式進行加密數據),並對數據進行加密,就算是數據被竊聽了,沒有密鑰得到也只是一團密文,不知道具體的內容。

2、數字簽名(解決數據篡改問題)

http不會對數據進行校驗,如果數據被竊聽,竊聽人可能看不懂密文內容,但是他可以惡意修改數據,數據不正確,就可能出現各種問題,導致伺服器奔流。

所以SSL因此添加了數據簽名。數據簽名是如何做的呢?

第一步:摘要數據

摘要數據是為了確認數據的完整性,因為使用約定的hash演算法計算出的hash值是不同的,如果數據發生變化,那麼數據的hash一定不會相同。將計算出的hash值和數據內容發給對方。對方接受後,使用摘要演算法摘要數據,並使用約定的hash演算法計算出新的hash值,然後跟發過來的hash值進行對比,來確認數據的完整性第二步:對摘要進行簽名對摘要進行簽名主要為了確認數據發送人的身份,主要是是使用非對稱加密技術。(* 非對稱加密是可以解密的,跟對稱加密一樣,只不過,不同的是非對稱幾碼的密鑰是兩把而已)。

一個公鑰則對應一個密鑰,用戶通過密鑰進行加密數據,然後傳輸給對方,對方需要使用對應的公鑰進行解密,如果解密成功,則證明用戶的身份(密鑰只有用戶有,公鑰則是公布出來的,而使用私鑰加密的數據只能使用用戶的公鑰才能解密,解密成功,則用戶身份確認正確;解密失敗則用戶身份不對。)。

3、數字證書(解決身份偽裝為題)

什麼是數字證書?

數字證書是專門用來識別通訊雙方信息的一個證書,它是由Certificate Authority( CA 認證中心)頒發的。

* 證書申請的中心很多,一般大家的數字證書都是CA頒發的。

他是如何解決身份偽裝的問題的?

因為http不校驗通信的雙方的身份而造成身份偽裝的問題,所以為了解決這個問題,產生了數字證書,使用流程大致如下:

  • 伺服器從大家都信任的第三方機構申請一個身份證書。
  • 客戶端和伺服器建立連接之前,會請求獲得伺服器申請的證書。
  • 伺服器把證書發給客戶端。
  • 客戶端拿著證書跟第三方機構驗證身份,驗證通過則建立通信。

三、https通信原理

https的通信原理主要包括幾點:發起請求、驗證身份、協商密鑰、加密會話,具體流程如下:

單項(雙向)驗證:

  1. 客戶端向伺服器發起建立https請求
  2. 伺服器向客戶端發送數字證書
  3. 客戶端驗證數字證書,證書驗證通過後客戶端生成會話密鑰(雙向驗證則此處客戶端會向服務端發送證書)。
  4. 伺服器會生成會話密鑰(雙向驗證此處伺服器也會對客戶端的證書驗證)。
  5. 客戶端與服務端開始進行加密會話。
https通信原理

具體流程:

第一步:客戶端向伺服器發起請求

1、客戶端生成隨機數R1並且發給伺服器端。

2、告訴伺服器自己支持哪些加密演算法。

第二步:伺服器向客戶端發送證書

1、接收到客戶端的數據後,生成隨機數R2。

2、從客戶端支持的演算法中,選擇一個伺服器支持的演算法,作為進行會話的密鑰演算法。

3、發送證書(證書公鑰[申請證書時,會有公鑰給伺服器]、企業信息、域名過期時間、摘要演算法)給客戶端。

第三步:協商共享密鑰

1、接受伺服器發送的數據:證書的公鑰、會話密鑰生成演算法、隨機數R2。

2、驗證證書的可靠性,先用CA的公鑰解密被加密過後的證書,能解密則說明證書沒有問題,然後通過證書里提供的摘要演算法進行對數據進行摘要,然後通過自己生成的摘要與服務端發送的摘要比對。

3、驗證證書合法性,包括證書是否吊銷、是否到期、域名是否匹配,通過後則進行後面的流程。

4、生成隨機數R3。

5、根據密鑰演算法使用R1、R2、R3三個隨機數生成共享密鑰。

6、用服務端證書的公鑰加密隨機數R3並發送給服務端。

第四步:伺服器得到用於進行會話的密鑰

1、伺服器通過私鑰解密客戶端發過來的隨機數R3。

2、根據會話的密鑰演算法使用R1、R2、R3生成會話密鑰。

第五步:客戶端與服務端進行加密會話

1、客戶端發送加密數據發給伺服器端。

2、伺服器響應客戶端。

解密接受的密文數據:伺服器端用會話密鑰解密客戶端發送的數據。

加密響應的數據:用會話密鑰把響應的數據加密發給客戶端。

3、客戶端接受伺服器端響應的數據

解密數據:客戶端用會話密鑰解密響應數據。

參考網站:

"https://www.cnblogs.com/zuoqun/p/8074956.html">數據簽名和驗簽:https://www.cnblogs.com/zuoqun/p/8074956.html

HTTPS和SSL/TLS協議是如何保證數據傳輸的安全性的:

blog.csdn.net/webber888

SSL/TLS協議交互流程分析:blog.csdn.net/rtmdk/art

ssl詳解:blog.csdn.net/shipfsh_s


推薦閱讀:
相关文章