前置知識(shí)
數(shù)字摘要與數(shù)字摘要算法
數(shù)字簽名原理
- 發(fā)送端(服務(wù)端)
-
原始數(shù)據(jù)經(jīng)過(guò)數(shù)字摘要算法生成數(shù)字摘要 -
私鑰對(duì)數(shù)字摘要進(jìn)行加密生成數(shù)字簽名 - 將
原始數(shù)據(jù)、數(shù)字簽名打包發(fā)送
- 接收端(客戶端)
- 提取
原始數(shù)據(jù),使用約定的數(shù)字摘要算法計(jì)算出數(shù)字摘要A - 提取出
數(shù)字簽名,使用公鑰對(duì)其解密得到數(shù)字摘要B - 判斷
數(shù)字摘要A是否與數(shù)字摘要B一致
接收端如何獲取到公鑰?數(shù)字證書可以幫到你
- 發(fā)送端(服務(wù)端)
- 發(fā)送端向CA申請(qǐng)
數(shù)字證書 -
發(fā)送端公鑰經(jīng)過(guò)數(shù)字證書里的摘要算法生成數(shù)字摘要 -
數(shù)字證書私鑰對(duì)數(shù)字摘要進(jìn)行加密生成數(shù)字簽名 - 將
發(fā)送端公鑰、數(shù)字簽名、數(shù)字證書打包發(fā)送
- 接收端(客戶端)
- 提取
發(fā)送端公鑰 - 提取
數(shù)字證書,校驗(yàn)數(shù)字證書是否可信 - 如果可信,使用
發(fā)送端公鑰和數(shù)字證書里的摘要算法計(jì)算出數(shù)字摘要A - 從
數(shù)字證書中拿到數(shù)字證書公鑰 - 提取出
數(shù)字簽名,使用數(shù)字證書公鑰對(duì)其解密得到數(shù)字摘要B - 判斷
數(shù)字摘要A是否與數(shù)字摘要B一致 - 如果一致,發(fā)送與接收雙方可以利用非對(duì)稱加密進(jìn)行通信
HTTP的不安全性
- 被中間人竊聽(tīng)(HTTPS可解決)
- 被中間人篡改(HTTPS可解決)
- 被中間人偽造(HTTPS可解決)
- 被中間人丟棄(HTTPS不可解決)
HTTPS概念
HTTP over SSL/TLS
HTTPS請(qǐng)求過(guò)程
- C向S發(fā)起訪問(wèn)請(qǐng)求
- S向C發(fā)送數(shù)字證書
- C校驗(yàn)接收到的數(shù)字證書是否可信
- 如果不可信,顯示警告
- 如果可信,提取公鑰
- C生成對(duì)稱加密私鑰對(duì)
- C使用證書提取的公鑰加密私鑰對(duì),發(fā)送給S
- S使用證書私鑰解密接收到的C端私鑰對(duì)
- 后續(xù)通信使用C端私鑰對(duì)進(jìn)行