HTTP 傳輸的弊端
- 如上圖,Http進行數據傳輸的時候是明文傳輸,導致任何人都有可能截獲信息,篡改信息
- 如果此時黑客冒充服務器,或者黑客竊取信息,則其可以返回任意信息給客戶端,而且不被客戶端察覺,所以我們經常會聽到“劫持”這個詞
改進HTTP傳輸-對稱加密傳輸
- 改進版本之后,Client和Service端在進行通信的時候,用對稱加密,Client與Servic端分別保存密鑰A,通信加密,解密都用A
- 問題點:
- 對稱加密一般約定加密算法與密鑰A,每個客戶端不一樣,因此維護困難,一般都維護在Service或者Client某一端,由Service 或者Client生成密鑰A后傳遞給另外一端口, 這樣密鑰A在傳輸過程存在泄漏可能
改進HTTP傳輸-非對稱加密
- 以上Client 保存公鑰,公開的,所有人可見,Service保存私鑰。
- Client發信息用公鑰加密發給Service用私鑰解密
- Service 發信息用私鑰加密發給Client用公鑰解密
- 問題:
- 公鑰公開的,黑客也能能通過公鑰解密獲取到的所有Service端發送到Client的信息,造成信息泄漏
改進HTTP傳輸-對稱加密和非對稱加密結合使用
-
Client持有公鑰,Service 持有私鑰,第三步開始Client 生成一個對稱密鑰A,用公鑰加密A得到加密后的字符B
-
Client將B 以及 用A加密后的密文 一起 發送給Service ,Service 用 私鑰解密 B 得到A,利用A解密密文的到原文
-
同樣Service用A加密要傳輸的數據得到密文傳輸給Client用A解密得原文
-
優點:
- 密文安全性,公鑰即使泄漏,但是密文是 A加密的,公鑰無法解密
- 密鑰安全性,A傳輸過程用公鑰加密的,即使被截獲,沒有私鑰也無法解密得不到對稱密鑰
- 對稱加密的優勢:對稱加密如果能保證秘鑰不被黑客獲取,那么他是安全的,并且對稱加密的速度具有很大優勢,用在蜜文加密上
- 非對稱加密優勢:非對稱加密請求發起時候盡管使用的是公鑰加密,但是因為必須使用私鑰解密的特點,因此能夠保證消息體在向服務器用在對稱密鑰加密上
-
風險點:
- 第一步 公鑰獲取的時候被截獲,公鑰不是Service給的,是黑客給的,之后所有請求都是黑客偽造的,Client得到的公鑰 和黑客的私鑰是匹配的,完犢子
改進HTTP傳輸- 對稱加密+非對稱加密+SSL證書(HTTPS實現)
-
首先說明證書作用:如上圖,2步驟時候服務器發送了一個SSL證書給客戶端,SSL證書中包含的具體內容有:
- 證書發布機構CA
- 證書有效期
- 公鑰
- 證書所有者
- 簽名
-
客戶端在接受服務器發來的SSL證書會對證書進行校驗,以瀏覽器為例說明如下:
- 首先瀏覽器讀取證書中的證書所有者,有效期信息進行校驗
- 瀏覽器開始查找操作系統中已內置的收信人的證書發布機構CA,與服務器發來的證書中的頒發者CA對比,用于校驗證書是否為合法機構頒發
- 如果找不到,瀏覽器報錯,說明服務器發來的證書是不可信的。
- 如果找到,瀏覽器會從操作系統中取出頒發者CA的公鑰,然后對服務器發來的證書里面的簽名進行解密
- 瀏覽器使用相同的hash算法計算出服務器發來的證書的hash值,將這個計算的hash值與證書中簽名做對比
- 對比結果一致,則證明服務器發來的證書核發,沒有被冒充。
- 此時瀏覽器就可以讀取證書中公鑰,用于后續加密了。
-
通過SSL證書,完成了公鑰的安全獲取,安全性由第三方保證。接下來就是走上一個步驟中說明的:對稱加密和非對稱加密結合使用過程
-
總的來說,HTTPS實現如下圖
- 紅色鑰匙–私鑰
- 綠色鑰匙–公鑰
- 黃色鑰匙–對稱密鑰
- Client發起請求(443接口)
- Service 返回公鑰SSL證書
- Client解析SSL得到公鑰
- Client生成對稱密鑰,并且用得到的公鑰給對對稱密鑰加密傳給Service
- Service端的到加密后對稱密鑰,用私鑰解密
- C/S雙方用對稱密鑰
- 加密明文并發送
- 解密密文的到明文