從上一篇HTTPS中CA證書的簽發及使用過程中知道服務端在申請CA證書時只上交了密鑰對中的公鑰,那么只有服務端知道的私鑰有什么作用呢?
SSL/TLS層的位置
SSL/TLS層在網絡模型的位置,它屬於應用層協議。接管應用層的數據加解密,並通過網絡層發送給對方。
SSL/TLS協議分握手協議和記錄協議,握手協議用來協商會話參數(比如會話密鑰、應用層協議等等),記錄協議主要用來傳輸應用層數據和握手協議消息數據,以及做加解密處理。我們應用層的的消息數據在SSL記錄協議會給分成很多段,然后再對這個片段進行加密,最后在加上記錄頭后就發送出去。
SSL/TLS 握手協議又細分為四個子協議,分別是握手協議、密碼規格變更協議、警告協議和應用數據協議。
握手流程(HTTPS中TLS/SSL的握手過程)
首先是TCP握手,TCP三次完成之后才進入SSL握手,SSL握手總是以ClientHello消息開始,就跟TCP握手總是以SYN包開始一樣。
SSL/TLS握手時的私鑰用途(RSA、ECDHE)
兩種使用方式分別是:使用RSA來做密鑰交換和使用ECDHE來做密鑰交換。對於RSA來說,客戶端生成預主密鑰,然后用公鑰加密再發給服務器,服務器用私鑰來解密得到預主密鑰,然后由預主密鑰生成主密鑰,再由主密鑰生會話密鑰,最后用會話密鑰來通信。
對於ECDHE來說,客戶端和服務器雙方是交換橢圓曲線參數,私鑰只是用來簽名,這是為了保證這個消息是持有私鑰的人給我發的,而不是冒充的。雙方交換完參數之后生成預主密鑰,再生成主密鑰和會話密鑰。這就跟剛才RSA后面的流程一樣了。
可以看出RSA和橢圓曲線密鑰交換算法的私鑰用途是不一樣的,RSA密鑰交換時是用來做加解密的,橢圓曲線密鑰交換時是用來做簽名的。
SSL/TLS中的預主密鑰、主密鑰和會話密鑰
主密鑰是由預主密鑰、客戶端隨機數和服務器隨機數通過PRF函數來生成;會話密鑰是由主密鑰、客戶端隨機數和服務器隨機數通過PRF函數來生成,會話密鑰里面包含對稱加密密鑰、消息認證和CBC模式的初始化向量,但對於非CBC模式的加密算法來說,就沒有用到這個初始化向量。
session 緩存和session ticket里面保存的是主密鑰,而不是會話密鑰,這是為了保證每次會話都是獨立的,這樣才安全,即使一個主密鑰泄漏了也不影響其他會話。
還有很多其他的密碼交換/協商機制:https://blog.csdn.net/andylau00j/article/details/54583769
主要摘自http://www.360doc.com/content/18/0606/20/13644263_760231690.shtml