HTTPS加密傳輸過程
HTTPS
全稱Hyper Text Transfer Protocol over SecureSocket Layer
,是以安全為目標的HTTP
通道,在HTTP
的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS
在HTTP
的基礎下加入SSL
層,HTTPS
的安全基礎是SSL
,因此加密的詳細內容就需要SSL
。
知識儲備
HTTP
HTTP
是應用層協議,默認運行在80
端口,是一種不安全的傳輸協議,經其傳輸的數據都是未加密的明文數據,可以被中間人攻擊,獲取到你的網絡傳輸數據,這也就是盡量不要使用公共場所WIFI
的原因。
HTTPS
HTTPS
是應用層協議,默認運行在443
端口,是一種安全的傳輸協議,通過在HTTP
層與運輸層的TCP
直接加入一個加密/身份驗證層來保證安全傳輸。
SSL
SSL
安全套接層Secure Sockets Layer
,位於TCP/IP
協議與各種應用層協議之間,為數據通訊提供安全支持。SSL
協議可分為兩層:
SSL
記錄協議SSL Record Protocol
:它建立在可靠的傳輸協議如TCP
之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。
SSL
握手協議SSL Handshake Protocol
:它建立在SSL
記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
TLS
TLS
傳輸層安全性協議Transport Layer Security
用於在兩個通信應用程序之間提供保密性和數據完整性,其由TLS
記錄協議和TLS
握手協議組成。TLS1.0
即為SSL3.0
的標准化版本,SSL
最初由網景Netscape
提出研發,在SSL3.0
時由國際互聯網工程任務組IETF
進行了標准化並添加了少量機制,並更名為TLS1.0
。
對稱加密
簡單來說對稱加密的加密密鑰和解密密鑰是相同的,對稱加密的效率要比非對稱加密高。
非對稱加密
簡單來說非對稱加密的加密密鑰與解密密鑰是不同的,需要一把公鑰與一把私鑰,私鑰不能被其他任何人知道,公鑰則可以隨意公開。公鑰加密,私鑰解密;私鑰數字簽名,公鑰驗證。
CA
由於公鑰是放在服務器的,在建立連接的過程中將公鑰傳輸到用戶,但是如何避免中間人攻擊,即在傳輸公鑰的過程中避免劫持,於是引入第三方認證權威機構CA
,大多數操作系統的CA
證書是默認安裝的,CA
也擁有一個公鑰和私鑰。任何人都可以得到CA
的證書,其包含公鑰,用以驗證它所簽發的證書。CA
為服務申請者頒發證書,在CA
判明申請者的身份后,便為他分配一個公鑰,並且CA
將該公鑰與申請者的身份信息綁在一起,並為之簽字后,便形成證書發給申請者。如果一個用戶想鑒別一個證書的真偽,他就用CA
的公鑰對那個證書上的簽字進行驗證,一旦驗證通過,該證書就被認為是有效的。證書實際是由證書簽證機關CA
簽發的對用戶的公鑰的認證。
傳輸過程
- 首先
TCP
三次握手建立鏈接,這是數據傳輸基礎,在此之上開始SSL
- 客戶端首先發送
Client Hello
開始SSL
通信,報文中包含客戶端支持的SSL
版本、隨機值Random1
、加密算法以及密鑰長度等。 - 服務器發送
Server Hello
,和客戶端一樣,在報文中包含SSL
版本、隨機值Random2
以及加密組件,此后服務端將證書也發送到客戶端。 - 此時客戶端需要對服務端發送的證書進行驗證,通過操作系統內置的
CA
證書,將服務器發送的證書的數字簽名進行解密,並將證書的公鑰進行相同算法的HASH
與解密的數字簽名解密的內容進行對比,驗證證書是否合法有效,是否被劫持更換。 - 客戶端驗證證書合法,然后生成一個隨機值
Random3
,用公鑰對Random3
進行加密,生成Pre-Master Key
,客戶端以Client Key Exchange
報文將Pre-Master Key
發送到服務端,此后發送Change Cipher Spec
報文表示此后數據傳輸進行加密傳輸。 - 服務端將
Pre-Master Key
用自己的私鑰解密為Random3
,服務端發送Change Cipher Spec
報文表示此后數據傳輸進行加密傳輸。 - 此時客戶端與服務端都擁有三個隨機字符串,且
Random3
是密文傳輸的,是安全狀態的,此時則可以使用這三個字符串進行對稱加密傳輸。由於非對稱加密慢,不能每次傳輸數據都進行非對稱加密,所以使用非對稱加密將密鑰協商好然后使用對稱加密進行數據傳輸。 - 此時便正常進行
HTTP
數據傳輸,但是由於SSL
加密的作用,此時的HTTP
傳輸便是安全的,此為HTTPS
的傳輸過程,其中2
、3
、5
、6
也被稱為SSL
四次握手。
每日一題
https://github.com/WindrunnerMax/EveryDay
參考
https://www.cnblogs.com/yangtianle/p/11202574.html
https://www.cnblogs.com/liyulong1982/p/6106132.html
https://blog.csdn.net/lyztyycode/article/details/81259284
https://blog.csdn.net/lihuang319/article/details/79970774
https://blog.csdn.net/qq_32998153/article/details/80022489