簡介
HTTPS是在HTTP的基礎上和ssl/tls證書結合起來的一種協議,保證了傳輸過程中的安全性,減少了被惡意劫持的可能.很好的解決了解決了http的三個缺點(被監聽、被篡改、被偽裝)
對稱加密和非對稱加密
-
對稱加密
- 即加密的密鑰和解密的密鑰相同,
-
非對稱加密
- 非對稱加密將密鑰分為公鑰和私鑰,公鑰可以公開,私鑰需要保密,客戶端公鑰加密的數據,服務端可以通過私鑰來解密
建立連接
-
HTTP和HTTPS都需要在建立連接的基礎上來進行數據傳輸,是基本操作
-
當客戶在瀏覽器中輸入網址的並且按下回車,瀏覽器會在瀏覽器DNS緩存,本地DNS緩存,和Hosts中尋找對應的記錄,如果沒有獲取到則會請求DNS服務來獲取對應的ip
-
當獲取到ip后,tcp連接會進行三次握手建立連接
tcp的三次揮手和四次揮手
過程簡圖
三次揮手(建立連接)
-
第一次:建立連接時,客戶端發送SYN包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
-
第二次:服務器收到SYN包,向客戶端返回ACK(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RCVD狀態;
-
第三次:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
-
完成三次握手,客戶端與服務器開始傳送數據,也就是ESTABLISHED狀態。
-
三次握手保證了不會建立無效的連接,從而浪費資源。
四次揮手(斷開連接)
-
第一次: TCP客戶端發送一個FIN,用來關閉客戶到服務器的數據傳送。
-
第二次:服務器收到這個FIN,它發回一個ACK,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號。
-
第三次:服務器關閉客戶端的連接,發送一個FIN給客戶端。
-
第四次:客戶端發回ACK報文確認,並將確認序號設置為收到序號加1。
HTTP請求過程
-
建立連接完畢以后客戶端會發送響應給服務端
-
服務端接受請求並且做出響應發送給客戶端
-
客戶端收到響應並且解析響應響應給客戶
HTTPS
-
在使用HTTPS是需要保證服務端配置正確了對應的安全證書
-
客戶端發送請求到服務端
-
服務端返回公鑰和證書到客戶端
-
客戶端接收后會驗證證書的安全性,如果通過則會隨機生成一個隨機數,用公鑰對其加密,發送到服務端
-
服務端接受到這個加密后的隨機數后會用私鑰對其解密得到真正的隨機數,隨后用這個隨機數當做私鑰對需要發送的數據進行對稱加密
-
客戶端在接收到加密后的數據使用私鑰(即生成的隨機值)對數據進行解密並且解析數據呈現結果給客戶
-
SSL加密建立