1. HTTP三大風險
1) 竊聽風險:黑客可以獲取通信內(nèi)容
2)篡改風險:黑客可以修改通信信息
3)冒充風險:黑客可以冒充他人身份和通信
- image
2. HTTPS
-
HTTP
image.png
3.加密算法
3.1對稱加密AES
- 加密和解密使用同一個密鑰
- image
3.2 非對稱加密
3.3 哈希算法
先算出摘要(hash值)鸟蜡,對稱進行簽名,直接簽名的話性能差
哈希函數(shù)的作用是給一個任意長度的數(shù)據(jù)生成一個固定長度的數(shù)據(jù)
安全性:可以從給定的數(shù)據(jù)X計算出哈希值Y关翎,但不能從哈希值Y計算數(shù)據(jù)X
獨一無二 不同的數(shù)據(jù)一定會產(chǎn)出不同的哈希值
長度固定 不管輸入多大的數(shù)據(jù) 輸出的長度都是固定的
- image
3.4 簽名
數(shù)字簽名的基本原理就是用私鑰去簽名良漱,而用公鑰去驗證簽名
- image
- image
3.5 數(shù)字證書
- 數(shù)字證書是一個由可信的第三方發(fā)出的铸史,用來證明所有人身份以及所有人擁有某個公鑰的電子文件
- image
3.6 密鑰交換算法
- Diffe-Hellman【赫爾曼算法】算法是一種密鑰交換協(xié)議(交換方式rha和ecc)籽孙,它可以讓雙方在不泄露的情況下協(xié)商出一個密鑰來
- image
3.7 ECC 是現(xiàn)實Diffe-Hellman(密鑰交換)的一種算法
- 橢圓曲線加密算法(ECC)是基于橢圓曲線數(shù)學的一種加密的算法
//這是簡化模擬的過程
let basic = 3;//共享basic
let a = 5;
let basicA = basic*a;//15
let b = 7;
let basicB = basic*b;//21
console.log(a*basicB);//105
console.log(b*basicA);//105
4. 加密過程
4.1 ClientHello
在一次新的握手流程中亲善,客戶端先發(fā)送ClientHello
Version 協(xié)議版本
Random 包含32個字節(jié)的隨機數(shù) 28隨機數(shù)字節(jié)+4字節(jié)時間戳,隨機數(shù)是為了保證每一次連接者是獨立無二的
Cipher Suites 客戶端支持的所有密碼套件
Extensions 擴展的額外數(shù)據(jù)
- image
4.2 ServerHello
- 將服務(wù)器選擇的連接參數(shù)發(fā)回給客戶端凉袱,消息結(jié)構(gòu)和ClientHello類似 ,每個字段只包含一個選項
- image
4.3 Certificate
- Certificate消息發(fā)送X.509證書
- image
4.5 Server Hello Done
- ClientKeyExchange消息攜帶客戶端為密鑰交換的所有信息
- image
4.6 ClientKeyExchange #
- ClientKeyExchange消息攜帶客戶端為密鑰交換的所有信息
- image
4.7 ChangeCipherSpec
- ChangeCipherSpec表示客戶端已經(jīng)得到了連接參數(shù)的足夠信息运杭,已生成加密密鑰夫啊,并切換到了加密模式
- image
4.8 EncryptedHandshakeMessage #
這個報文的目的就是告訴對端自己在整個握手過程中收到了什么數(shù)據(jù),發(fā)送了什么數(shù)據(jù),來保證中間沒人篡改報文
其次這個報文作用就是確認秘鑰的正確性辆憔。因為Encrypted handshake message是使用對稱秘鑰進行加密的第一個報文涮母,如果這個報文加解密校驗成功,那么就說明對稱秘鑰是正確的
計算方法就將之前所有的握手數(shù)據(jù)(包括接受和發(fā)送)計算哈希運算,然后就是使用協(xié)商好的對稱密鑰進行加密
加密(SHA(客戶端隨機數(shù)+服務(wù)器隨機數(shù)))
- image
4.9 New Session Ticket
SSL 中的 session 會跟 HTTP 的 session 類似,都是用來保存客戶端和服務(wù)端之間交互的一些記錄
如果服務(wù)端允許使用 Session ID,客戶端的 Client Hello 帶上 Session ID躁愿,服務(wù)端復用 Session ID 后叛本,會直接略過協(xié)商加密密鑰的過程,直接發(fā)出一個 Change Cipher Spec 報文,然后就是加密的握手信息報文
在服務(wù)器發(fā)送New Session Ticket消息
Type 類型
Version 版本
Length長度
Session Ticket Lifetime Hint 表示Ticket的剩余有效時間
Session Ticket 會話標識