一、什么是HTTPS?
1.1 https是在http協議上加了一層加密解密層
如圖:
https協議就是在http協議的基礎上經過一層加密解密層發送,然后接收端同樣需要經過加密解密層才能獲取到發送過來的數據,這樣就可以保證數據傳輸的安全性;
1.2 什么是加密?什么是解密?什么是明文?什么是密文?什么是秘鑰?
明文加密后就是密文,密文解密后就是明文,除了明文跟密文外的用來輔助加密跟解密過程的其他數據為秘鑰;
舉例一個很簡單的加密解密過程:
如圖,明文7經過秘鑰5加密后得到密文2,密文2再由秘鑰5解密后得到明文7;
其中5是用來輔助整個加密解密過程的,5是一個秘鑰;
1.3 常見的加密方式:
①、對稱加密:一個秘鑰:加密和解密所用的秘鑰是同一個;
特點:算法公開,計算量小,加密速度快,加密效率高;
圖示:
②、非對稱加密:兩個秘鑰:需要兩個秘鑰來進行加密和解密:
特點:當用公鑰加密時只有擁有私鑰的人才能進行解密,算法復雜,運行速度慢;
圖示:
二、HTTPS采用的加密方案
我們從最簡單的加密方案開始,一步步優化,最后得到比較完善成熟的加密方案就是現在的HTTPS的采用的加密方案:
2.1、方案一:只使用對稱加密
這種方案有兩種情況:情況一:
這種情況存在的問題:因為服務端一般是少數的,而客戶端是大量的,如果大量的客戶端都用這個秘鑰A,如果當某一天Server端更換A秘鑰時,大量的客戶端都需要跟著更換秘鑰,這樣會非常的麻煩;
如果不想這么麻煩換一個方法就是以下這種情況二:
以上方法是先從Server里獲取到秘鑰后再用這個秘鑰來加密,這樣可以不用擔心Server端的秘鑰更改帶來的麻煩,但是如此一來加密工作形同虛設,因為中間人可以在第二個步驟時捕獲到A秘鑰,所以只用對稱加密的方案是行不通的;
2.2 方案二:只使用非對稱加密
方案二存在的問題:中間人在第二步捕獲公鑰保存起來,然后再在第④步時捕獲Server的響應,然后通過公鑰對其進行解密得到明文內容,因為這里的密文是Server通過A'(私鑰)形成的,用之前保存的公鑰可以破解;
2.3 方案三:雙方都使用非對稱加密
方案三存在的問題是:非對稱加密所使用的加密算法復雜,且如果雙方都是用非對稱運行速度會很慢;
2.4 方案四:對稱加密+非對稱加密
方案四是從方案一一步步優化升級過來的策略,已經屬于比較成熟熟的方案了,但是這樣就真的沒問題了嗎?
中間人偽造秘鑰:
以上之所以能被破解是因為客戶端在獲取到Server的S公鑰時,它自身不能夠辨別出接收到的是否是Server的公鑰!!
那么如何才能讓客戶端精準正確的分辨出它所接受到的公鑰的的確確是其請求的Server所發回來的公鑰呢??
三、引入證書
3.1、在了解證書之前我們先對數據摘要&&數據指紋有一個了解
數據摘要也叫數據指紋,下文為了統一我就用數據摘要來進行描述:
某個數據經過哈希函數運算后生成一個散列值,這個散列值就是數據摘要;
這個散列值具有的特點:固定長度、有非常低的概率會發生沖突、唯一性、不可逆:
意思是:
因此,經過哈希運算后得到的這個字符串就是數據摘要,它能表示唯一的一篇原文數據!!
3.2、數字簽名
數字簽名很好理解,數字簽名就是在數據摘要的基礎上再進行加密!!
3.3、有了以上兩個背景知識我們在來了解證書
證書就是:一坨數據經過哈希算法后得到一個數據摘要,在給這個數據摘要加密得到一個數字簽名,把這個數字簽名附加在這坨數據上,得到的就是證書!
看圖:
CA機構:一個大家都知道都公認的具有權威信的一個機構,只有這個機構才能簽名跟頒發證書;
CA機構怎么對數據摘要進行加密的:CA機構擁有一對公鑰、私鑰,CA機構用它的私鑰進行加密,然后把它的公鑰發給大家,大家可以通過這個公鑰對其進行解密!
然后回歸正題,在前面2.4第四個方案那里我們談到,如何讓客戶端分辨出它所接收到的公鑰是真正想請求的Server端的公鑰呢?
第一步:Server端向CA機構申請證書,提交Sever端的域名、申請人、公鑰
第二步:CA機構審核通過后給Server頒發證書
第三步:Client向Server端申請Server的公鑰之前,Client端早已把CA結構發給大家的公鑰保存好;
第四步:Client獲取到Server的證書,這個證書上面除了數據+簽名外還寫有Server的公鑰;Client開始驗證這個公鑰的真實性:只需要用提前保存好的CA公鑰來解密這個證書上的簽名,得到一個數據摘要,然后同時把這個證書上的數據通過哈希運算得到一個數據摘要,然后這兩個數據摘要進行對比,如果一樣說明這個證書上攜帶的公鑰是通過CA機構審核的,是真實的!!
因此得到的方案五:
3.4、方案5:非對稱加密+對稱加密+證書認證
此時再遇到中間人攻擊:①中間人把數據篡改,Client把處理后的兩個數據摘要一對比就能發現;
②中間人把簽名進行篡改,Client無法通過CA公鑰解密簽名;
③中間人直接把這個證書調包:這個證書申請時有域名、申請人等信息,不會存在兩個一樣的域名,Client一樣能識別出來;
以上是HTTPS目前最為成熟的加密方案,也就是通過:非對稱+對稱加密+證書認證(但并不能保證百分百安全,往后可能還會出現某些防范不了的安全問題,所以方案沒有唯一的,都是在不停的完善當中);
以上為本次分享的所有內容,如果對你有所幫助,麻煩點贊收藏+關注哦!!謝謝!!!
咱下期見!!!