1、HTTP 協議(HyperText Transfer Protocol,超文本傳輸協議):是客戶端瀏覽器或其他程序與Web服務器之間的應用層通信協議 。
2、HTTPS 協議(HyperText Transfer Protocol over Secure Socket Layer):可以理解為HTTP+SSL/TLS, 即 HTTP 下加入 SSL 層,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL,用於安全的 HTTP 數據傳輸。
3、SSL(Secure Socket Layer,安全套接字層):1994年為 Netscape 所研發,SSL 協議位於 TCP/IP 協議與各種應用層協議之間,為數據通訊提供安全支持。
4、TLS(Transport Layer Security,傳輸層安全):其前身是 SSL,它最初的幾個版本(SSL 1.0、SSL 2.0、SSL 3.0)。
如上圖所示 HTTPS 相比 HTTP 多了壹層 SSL/TLS。
1、對稱加密
有流式、分組兩種,加密和解密都是使用的同壹個密鑰。
例如:DES、AES-GCM、ChaCha20-Poly1305等
2、非對稱加密
加密使用的密鑰和解密使用的密鑰是不相同的,分別稱為:公鑰、私鑰,公鑰和算法都是公開的,私鑰是保密的。非對稱加密算法性能較低,但是安全性超強,由於其加密特性,非對稱加密算法能加密的數據長度也是有限的。
例如:RSA、DSA、ECDSA、 DH、ECDHE
3、哈希算法
將任意長度的信息轉換為較短的固定長度的值,通常其長度要比信息小得多,且算法不可逆。
例如:MD5、SHA-1、SHA-2、SHA-256 等
4、數字簽名
簽名就是在信息的後面再加上壹段內容(信息經過hash後的值),可以證明信息沒有被修改過。hash值壹般都會加密後(也就是簽名)再和信息壹起發送,以保證這個hash值不被修改。
C++音視頻開發學習資料 :點擊 音視頻開發(資料文檔+視頻教程+面試題)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
HTTP協議在瀏覽器/服務器間進行數據的傳輸是明文的,不做任何的加密,通俗來說,就是“裸奔”,這樣會產生什麽樣的問題那,我們來舉壹個例子:
在這裏插入圖片描述
上述我們通過兩個人物模仿了服務器和客戶端的交互,我們可以看出,小明和小花之間進行數據通信的時候采用的是明文傳輸的、那麽此時很有可能被中間人獲取信息、並進行數據篡改,這種行為就叫 中間人攻擊。
所以 HTTP 傳輸面臨的風險有:
(1) 竊聽風險:黑客可以獲知通信內容。
(2) 篡改風險:黑客可以修改通信內容。
(3) 冒充風險:黑客可以冒充他人身份參與通信。
哈哈、此時妳是不是不能很愉快的上網沖浪了呀,別擔心,我們此時可以對明文進行加密:
這樣是不是比原來安全多了呀!但是這樣就足夠安全了嗎?顯然不是的,如果小明和小花在第壹次聊天的時候,信息被中間人截取到了,那麽中間人是不是也就有密鑰了,同樣可以對數據進行加解密和修改了那
這可怎麽辦那? 加密的數據還是不安全的啊? 別急,上面我們采用的是對稱加密(換句話說就是我們發送的密鑰技能加密、也能解密,那麽中間人只要拿到密鑰消息對他而言就是透明的了),我們還可以采用非對稱加密方式進行加密數據(非對稱加密壹般都會有壹個私鑰和公鑰組成。可以通過公鑰加密,私鑰解密,也可以通過私鑰加密,公鑰解密兩種方式) ,對密鑰的傳送在格外加壹層保護,當小明和小花在建立通信的時候,小花會把公鑰KEY發送給小明,當小明拿到公鑰KEY 後,會自己生成壹個 密鑰 KEY2 , 並用 KEY 對KEY2 進行加密(此時小明用的是公鑰加密)
在通信過程中,即使中間人壹開始就獲取到了公鑰KEY ,但是他不知道私鑰,就對數據無法進行解密,仍舊是沒辦法獲取KEY2。這樣加密後,數據是不是就安全多了呀。這種情況下就可以和妹子愉快的進行聊天了嗎?別急、所謂道高壹尺魔高壹丈,常言道:流氓不可怕,就怕流氓有文化。這種狀態下我們的數據,相當來說是比較安全的,但是如果此時中間人獲取公鑰後,發送給小明壹個偽公鑰,又會產生什麽問題那?
好吧,說到這裏,大家是不是快恨死這個中間人了啊,哈哈~~~還有據俗話別忘記了,魔高壹尺道高壹丈,對於這種情況。我們可以借助與第三方證書平臺,證書平臺具備產生證書的功能,服務器(小花)可以去證書機構申請證書,證書機構通過小花提供的信息(網址、機構、法人等、公鑰),生成公鑰和私鑰(證書機構的),通過私鑰進行數據的非對稱加密生成證書、將證書頒發給小花。那麽此時小花就可以在進行數據交互的時候,傳遞證書了。
小明只需要知道證書的發證機構、就可以很方便的獲取到證書的公鑰、從而對證書進行校驗並獲取公鑰、然後進行後續的操作。
那麽此時小夥伴是不是又有疑問了,如果 中間人 獲取到證書、並偽造證書給小明、怎麽破?
不錯不錯、如果大家有這個想法的話,說明大家都在認真思考了。那麽我們假設中間人獲取到了證書、中間人也可以在證書機構獲取公鑰,並通過證書機構公鑰獲取 服務器發送的公鑰,中間人此時也可以自己生成公鑰,並向證書機構申請證書、並發送偽證書給小明,但是因為證書是經過簽名認證的,包含(網址、機構、法人等、公鑰)等信息,小明在拿到偽證書後,通過證書公鑰很容易就發現證書是不合法的(網址、法人的信息可定不符,否則申請不到證書的)。
上述我們分享的內容就是HTTPS的主體思想,HTTPS增加了SSL安全層,上述介紹的所有認證流程都是在SSL安全層完成驗證的。今天我就分享HTTPS的實現原理就說這麽多了。 ﹏
HTTPS 缺點:
(1)SSL 證書費用很高,以及其在服務器上的部署、更新維護非常繁瑣。
(2)HTTPS 降低用戶訪問速度(多次握手)。
(3)網站改用HTTPS 以後,由HTTP 跳轉到 HTTPS 的方式增加了用戶訪問耗時(多數網站采用302跳轉)。
(4)HTTPS 涉及到的安全算法會消耗 CPU 資源,需要增加大量機器(https訪問過程需要加解密)。