SSL/TSL要解決的問題
在不使用SSL/TSL加密的HTTP通信就是不加密的通信鲫剿,所有的信息都是明文傳播屎鳍。帶來了以下幾個風險:
- 竊聽風險:第三方可以獲取通信內(nèi)容。
- 篡改風險:第三方可修改通信內(nèi)容。
- 冒充風險:第三方可以冒充他人進行通信。
而SSL/TSL就是為了解決這三大風險而設(shè)計的:
- 所有信息加密傳播谴古,第三方無法得知通信內(nèi)容。
- 添加信息校驗機制稠歉,一旦通信信息被篡改掰担,通信雙方就能發(fā)現(xiàn)。
- 添加身份證書怒炸,防止被第三方假冒带饱。
SSL/TSL的基本運行原理
SSL/TSL基本思路采用的是公鑰加密法,也就是阅羹,客戶端先向服務(wù)器索要公鑰勺疼,然后用公鑰加密信息,服務(wù)器收到密文灯蝴,然后用自己的私鑰解密信息恢口。
在實際使用中為了解決公鑰被篡改的問題引入了信任的數(shù)字證書;
將公鑰放在數(shù)字證書中穷躁,只要證書是可信任的耕肩,公鑰就是可信的
使用非對稱加密的公鑰加密信息的計算量太大,為了減少計算耗時:
在每次回話中(session)问潭,客戶端和服務(wù)端都生成一個“對話秘鑰”猿诸,用它來加密信息。由于使用的是對稱加密狡忙,
所以運算速度非呈崴洌快,而服務(wù)器的公鑰只用于加密“對話秘鑰”本身灾茁。這樣就減少了加密運算消耗的時間窜觉。
從上面我們可以大致的總結(jié)一下SSL/TSL協(xié)議的基本過程如下:
- 客戶端向服務(wù)端索要并驗證公鑰。
- 雙方協(xié)商生成“對話秘鑰”北专。
- 雙方采用“對話秘鑰”進行加密通信禀挫。
前面兩步又稱為“握手階段”。
握手階段分為一下步驟
1. 客戶端發(fā)出請求
客戶端向服務(wù)端發(fā)送加密通信請求拓颓,并提交一下信息:
- 支持協(xié)議的版本语婴,比如TLS 1.0版本。
- 客戶端生成的隨機數(shù),用于后面生成“對話秘鑰”砰左。
- 支持的加密方法匿醒,如RSA加密。
- 支持的壓縮方法缠导。
2. 服務(wù)器回應(yīng)請求
服務(wù)端收到客戶端請求后廉羔,向客戶端做出回應(yīng)。
- 確認使用的加密通信版本酬核,如TLS 1.0版本蜜另。如果瀏覽器與服務(wù)器支持的版本不一致适室,服務(wù)器關(guān)閉加密通信嫡意。
- 一個服務(wù)器生成的而隨機數(shù),用于隨后的“對話秘鑰“捣辆。
- 確認使用的加密方法蔬螟,如RSA公鑰加密。
- 服務(wù)器證書汽畴。
除了以上回應(yīng)旧巾,如果服務(wù)器需要確認客戶端的身份,就會要求客戶端提供”客戶端證書“忍些。
3. 客戶端結(jié)束握手請求
客戶端收到服務(wù)器的回應(yīng)以后鲁猩,首先驗證服務(wù)器的證書。如果證書不是可信任機構(gòu)頒布罢坝、或者證書中的域名與實際域名不一致廓握、或者證書已經(jīng)過期,就會向訪問者顯示一個警告嘁酿,由其選擇是否還要繼續(xù)通信隙券。
如果證書沒問題,客戶端就會從證書中獲取服務(wù)器的公鑰闹司,然后向服務(wù)器發(fā)送以下信息:
- 一個隨機數(shù)娱仔。該隨機數(shù)用服務(wù)器公鑰加密,防止被竊聽游桩。
- 編碼改變通知牲迫,表示隨后的信息都將用雙方商定的加密方法和秘鑰發(fā)送。
- 客戶端握手結(jié)束通知借卧,表示客戶端握手階段已經(jīng)結(jié)束盹憎。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值,用來供服務(wù)器校驗谓娃。
上面第一項的隨機數(shù)脚乡,是整個握手階段出現(xiàn)的第三個隨機數(shù),又稱"pre-master key"。有了它以后奶稠,客戶端和服務(wù)器就同時有了三個隨機數(shù)俯艰,接著雙方就用事先商定的加密方法,各自生成本次會話所用的同一把"會話密鑰"锌订。
4. 服務(wù)端結(jié)束握手請求
服務(wù)端收到客戶端的第三個隨機數(shù)pre-master key后竹握,經(jīng)過計算生成本次會話所用的秘鑰。然后向客戶端發(fā)送一下信息:
- 編碼改變通知辆飘,表示隨后的信息將用雙方商定的加密方法和秘鑰發(fā)送啦辐。
- 服務(wù)器握手結(jié)束通知,表示服務(wù)器的握手階段已經(jīng)結(jié)束蜈项。這一項同時也是前面發(fā)送的所有內(nèi)容的hash值芹关,用來供客戶端校驗。
至此紧卒,整個握手階段全部結(jié)束侥衬。接下來,客戶端與服務(wù)器進入加密通信跑芳,就完全是使用普通的HTTP協(xié)議轴总,只不過用"會話密鑰"加密內(nèi)容。
本文章僅僅是個人學習記錄博个。
參考自SSL/TLS協(xié)議運行機制的概述