HTTPS中SSL/TLS握手時的私鑰用途(RSA、ECDHE)

從上一篇HTTPS中CA證書的簽發及使用過程中知道服務端在申請CA證書時只上交了密鑰對中的公鑰,那麼只有服務端知道的私鑰有什麼做用呢?html

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後面的流程同樣了。session

能夠看出RSA和橢圓曲線密鑰交換算法的私鑰用途是不同的,RSA密鑰交換時是用來作加解密的,橢圓曲線密鑰交換時是用來作簽名的。函數

SSL/TLS中的預主密鑰、主密鑰和會話密鑰

主密鑰是由預主密鑰、客戶端隨機數和服務器隨機數經過PRF函數來生成;會話密鑰是由主密鑰、客戶端隨機數和服務器隨機數經過PRF函數來生成,會話密鑰裏面包含對稱加密密鑰、消息認證和CBC模式的初始化向量,但對於非CBC模式的加密算法來講,就沒有用到這個初始化向量。加密

session 緩存和session ticket裏面保存的是主密鑰,而不是會話密鑰,這是爲了保證每次會話都是獨立的,這樣才安全,即便一個主密鑰泄漏了也不影響其餘會話。spa

 

還有不少其餘的密碼交換/協商機制:http://www.javashuo.com/article/p-nddogmha-gx.html

 

主要摘自http://www.360doc.com/content/18/0606/20/13644263_760231690.shtml

相關文章
相關標籤/搜索