1、 SSL/TSL基本知識
(1)SSL/TLS協議運行機制:https://blog.csdn.net/fw0124/article/details/40873253
(2)圖解SSL/TLS協議:https://blog.csdn.net/fw0124/article/details/40875629
(3)SSL/TLS 雙向認證(一) -- SSL/TLS工作原理:https://blog.csdn.net/ustccw/article/details/76691248
(4)Java SSL/TLS 安全通訊協議介紹:https://www.ibm.com/developerworks/cn/java/j-lo-ssltls/
2、 TLS/SSL雙向認證握手過程分析
(1)client_hello
支持的協議版本,比如TLS 1.0;
支持的加密算法(Cipher Specs);
客戶端生成的隨機數1(Challenge),稍後用於生成"對話密鑰"。
(2)server_hello
確認使用的協議版本;
服務器生成的隨機數2,稍後用於生成"對話密鑰";
確認使用的加密算法; 算法解釋: HTTPS背後的加密算法
向客戶端提供自己的證書;
請求客服端的證書。
(3)客戶端發生給服務端
客戶端證書發送給服務端;
client_key_exchange。
(4)客戶端發生給服務端
客戶端證書校驗;
change_cipher_spec:客戶端通知服務器後續的通信都採用協商的通信密鑰和加密算法進行加密通信。
(5)服務端向客戶端
change_cipher_spec: 驗證通過之後,服務器同樣發送 change_cipher_spec 以告知客戶端後續的通信都採用協商的密鑰與算法進行加密通信;
encrypted_handshake_message:服務器也結合所有當前的通信參數信息生成一段數據並採用協商密鑰 session secret 與算法加密併發送到客戶端;
(6)加密通信
開始使用協商密鑰與算法進行加密通信。
3、SSL雙向認證過程如何進行加密數據傳輸業務數據的?
簡單的說:
在認證初期,客戶端和服務端分別生成一個隨機數。後面,在第(3)步,客戶端又生成pre-master-key隨機數,加密後傳給服務端。此時,客戶端和服務端雙方都有三個隨機數了。
此時,客戶端和服務端分別將這三個隨機數通過前面協商的加密算法進行加密,各自生成本次會話所用的同一把“會話祕鑰”。即:雙方使用同一把密碼進行對稱加解密通信。
下面是詳解:
4、其他關於SSL/TSL詳解
(1)HTTPS加密協議詳解(四):TLS/SSL握手過程:https://www.wosign.com/faq/faq2016-0309-04.htm
(2)HTTPS--使用wireshark觀察SSL/TLS握手過程--雙向認證/單向認證:https://blog.csdn.net/xiangjai/article/details/51898657
(3)TLS/SSL 協議詳解 (16) client key exchange:https://blog.csdn.net/mrpre/article/details/77868396
(4)Java Secure(SSL/TLS) Socket實現:https://blog.csdn.net/a19881029/article/details/11742361