Https、數字證書原理(加密解密)
年後回來後加班嚴重,最近出差一個月而且還是997,沒時間更新文章了。
今天來說一下:https的原理以及數字證書籤名的原理。本章知識涉及到加密解密方面的知識,不懂的可以去翻一下我之前的文章。
一、http的不足之處
http在傳輸過程中,是很容易出現問題的:
- 竊聽。http在傳輸過程中,使用http抓包等工具之類的可以獲取http信息,由於數據未加密,明文傳輸的,則會被其他人竊聽。
- 身份偽裝。「QQ聊天是複雜的,你永遠不知道對面跟你聊天的是人還是狗」,當年qq很火的那個時代,一句話道進了網路的複雜。http請求的雙方是不會對對方進行身份校驗的,你根本無法確認對面是誰調用你的介面。
- 數據篡改。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的通信原理主要包括幾點:發起請求、驗證身份、協商密鑰、加密會話,具體流程如下:
單項(雙向)驗證:
- 客戶端向伺服器發起建立https請求
- 伺服器向客戶端發送數字證書
- 客戶端驗證數字證書,證書驗證通過後客戶端生成會話密鑰(雙向驗證則此處客戶端會向服務端發送證書)。
- 伺服器會生成會話密鑰(雙向驗證此處伺服器也會對客戶端的證書驗證)。
- 客戶端與服務端開始進行加密會話。