是以https總共有兩種加密方式。
https兩種方式
1.白話Https 這種加密方式與openssl加密http網站過程1中加密方式不同
<a href="http://www.cnblogs.com/xinzhao/p/4949344.html" target="_blank">http://www.cnblogs.com/xinzhao/p/4949344.html</a>
<a href="https://s4.51cto.com/wyfs02/M01/9B/B5/wKioL1lmGRnBKP0nAAC9UFHzwjU305.png-wh_500x0-wm_3-wmp_4-s_3986529697.png" target="_blank"></a>
<a href="https://s3.51cto.com/wyfs02/M00/9B/B5/wKioL1lmGSXiAnzRAAFhCQcaUkg121.png-wh_500x0-wm_3-wmp_4-s_2354146804.png" target="_blank"></a>
1.client
資訊:用戶端公鑰,用戶端會話密鑰
使用伺服器公鑰加密
2.server
資訊:伺服器會話密鑰
使用用戶端公鑰加密
3.client
使用用戶端會話密鑰加密後的http資料
4.server
使用伺服器會話加密後的http資料
2.我們來一起說說HTTPS中間人攻擊與證書校驗
http://wzlinux.blog.51cto.com/8021085/1908856
<a href="https://s5.51cto.com/wyfs02/M02/9B/B5/wKiom1lmGTDxAFcLAAOqlcusP2c105.jpg-wh_500x0-wm_3-wmp_4-s_1749498083.jpg" target="_blank"></a>
1.用戶端在驗證證書有效之後發送ClientKeyExchange消息,ClientKeyExchange消息中,會設定48位元組的premaster secret(因為的TLS版本的原因,這裡沒有顯示premaster),通過密鑰交換算法加密發送premaster secret的值,例如通過 RSA公鑰加密premaster secret的得到Encrypted PreMaster傳給服務端。PreMaster前兩個位元組是TLS的版本号,該版本号字段是用來防止版本回退攻擊的。
從握手包到目前為止,已經出現了三個随機數(用戶端的random_c,服務端的random_s,premaster secret),使用這三個随機數以及一定的算法即可獲得對稱加密AES的加密主密鑰Master-key,主密鑰的生成非常的精妙。
2.server端知道premaster secret和Master-key
可以進行驗證
驗證加密算法的有效性,結合之前所有通信參數的 hash 值與其它相關資訊生成一段資料,采用協商密鑰 session secret 與算法進行加密,然後發送給伺服器用于資料與握手驗證,通過驗證說明加密算法有效
4.同樣的,服務端也會發送一個Encrypted Handshake Message供用戶端驗證加密算法有效性
再看一種過程

浏覽器對伺服器發送了一次請求,包含協定版本号、一個用戶端生成的随機數(Client random),以及用戶端支援的加密方法。
伺服器确認雙方使用的加密方法,并給出數字證書、以及一個伺服器生成的随機數(Server random)。
浏覽器确認數字證書有效,然後生成一個新的随機數(Premaster secret),并使用數字證書中的公鑰,加密這個随機數,發給伺服器。
伺服器使用自己的私鑰,擷取浏覽器發來的随機數(即Premaster secret)。
伺服器和浏覽器根據約定的加密方法,使用前面的三個随機數,生成"對話密鑰"(session key),用來加密接下來的整個對話過程。
本文轉自 liqius 51CTO部落格,原文連結:http://blog.51cto.com/szgb17/1946866,如需轉載請自行聯系原作者