HTTPS握手
作用
- 內容加密?建立一個信息安全通道,來保證數據傳輸的安全;
- 身份認證?確認網站的真實性
- 數據完整性?防止內容被第三方冒充或者篡改
?
https的采用了對稱加密和非對稱加密。握手過程中采用非對稱加密,得到一個對稱加密的秘鑰。數據傳輸的過程中,采用對稱加密。
采用非對稱加密比較慢,因此只在握手期間采用非對稱加密,保證拿到的對稱加密的秘鑰的安全性,數據傳輸期間通過對稱加密來加密,速度更快。
?
握手:
對稱加密秘鑰的生成:
握手期間,client與server兩次往來。會生成三個隨機數,由這三個隨機數組成對稱加密的秘鑰。
client驗證server可靠性:
瀏覽器第一次收到服務器的ack時,會驗證數字證書,一直驗證到最頂層的根證書,如果瀏覽器內置有,則可信,否則不可信。
?
數據傳輸:
http報文的內容都會經過TLS層進行對稱加密,秘鑰是握手時生成的。發送使用秘鑰加密,接收時使用秘鑰解密。
?
這里有一個問題,就是利用哪種非對稱加密算法,這可能會影響https握手過程中的交換數據。以RSA算法和Diffie-Hellman算法為例,看一下兩種加密方式分別經歷了什么。
這個是RSA加密的交互過程。
?
第一個隨機數由client生成,第二個隨機數由server生成。
第三個隨機數由client生成,使用server的公鑰加密,并發送給server。第三個隨機數即圖中的Premaster secret。這個過程中,Premaster secret只有client和server知道,不會泄露。
然后client和server根據三個隨機數生成一個session key,即接下來數據傳輸過程中用到的對稱秘鑰。
?
總結來說就是一共生成三個隨機數,根據三個隨機數創建一個對稱加密的秘鑰。前兩個隨機數可以被抓包拿到,但是第三個隨機數已經使用非對稱加密算法加密過,所以最終生成的秘鑰是保密的。
?
?
現在的問題就是,對稱秘鑰的安全靠第三個隨機數的不可破解來保證。理論上來說,只要服務器的公鑰足夠長,那么Premaster secret可以保證不被破解。但是為了足夠安全,我們可以考慮把握手階段的算法從默認的RSA算法,改為 Diffie-Hellman算法(簡稱DH算法)。
下面是DH算法握手的過程:
與上面client使用RSA公鑰加密Premaster secret然后傳遞的server不同的是,由server發送一個server的DH 參數+private key,client發送一個client的DH參數,那么client和server都能分別通過兩個DH參數得到Premaster secret。這樣就提高了Premaster secret的安全性。
?
?
參考文章:
圖解SSL/TLS協議
HTTPs入門, 圖解SSL從回車到握手
HTTPS科普掃盲帖
詳解https是如何確保安全的?
轉載于:https://www.cnblogs.com/z941030/p/8527001.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 有意思的前端函数面试题
- 下一篇: elk6.2集群搭建,cerebro集群