什么是SSL/TLS
- 網(wǎng)絡(luò)要保證通訊安全定躏,要保障的最主要的點,其實在前面都已經(jīng)介紹了共屈。就是:機密性、完整性、認(rèn)證問題
- 我們把前面能夠保證這些要求的技術(shù)環(huán)列一下:
- 保證機密性的對稱密碼幌衣,使用偽隨機數(shù)生成的密鑰,保證通訊雙方都能安全獲取密鑰的公鑰密碼或Diffie-Hellman密鑰交換
- 保證完整性的消息認(rèn)證碼豁护,生成此認(rèn)證碼的單向散列函數(shù)
- 解決認(rèn)證問題的數(shù)字簽名和證書
- SSL/TLS實際上就是上面多種技術(shù)以某種方式組合在一起的組合套餐,以幫助實現(xiàn)通訊安全断部。
- HTTP班缎、SMTP/POP3等應(yīng)用層協(xié)議可以承載在SSL/TLS之上
- SSL和TLS大體是相同的她渴,只有少量微妙的區(qū)別。
基于TLS 1.0講解通訊過程
TLS協(xié)議結(jié)構(gòu)
- TLS協(xié)議分成兩層:TLS記錄協(xié)議(TLS record protocol)趁耗、TLS握手協(xié)議(TLS handshake protocol)
-
TLS握手協(xié)議是負責(zé)加密以外的其他事情疆虚。握手協(xié)議分成4個子協(xié)議,分別是:握手協(xié)議径簿、密碼規(guī)格變更協(xié)議、警告協(xié)議篇亭、應(yīng)用數(shù)據(jù)協(xié)議
- 握手協(xié)議:負責(zé)通信雙方之間協(xié)商決定密碼算法和共享密鑰
- 密碼規(guī)格變更協(xié)議:負責(zé)向通信對象傳達變更密碼方式的信號
- 警告協(xié)議:負責(zé)在發(fā)生錯誤時將錯誤傳給對方
- 應(yīng)用數(shù)據(jù)協(xié)議:是將TLS承載的應(yīng)用數(shù)據(jù)傳達給通訊對象
-TLS記錄協(xié)議是負責(zé)消息的壓縮、加密以及數(shù)據(jù)的認(rèn)證暗赶。
- TLS記錄協(xié)議使用到的所有的算法等都是經(jīng)過握手協(xié)議協(xié)商確認(rèn)后的,以保證通訊雙方是使用相同的算法十嘿。
- 首先岳锁,消息會被 分割成多份绩衷,并用協(xié)商好的壓縮算法進行壓縮
- 其次激率,壓縮片段會加上消息認(rèn)證碼以保證完整性,為了防止重放攻擊還加上了片段編號招盲。
- 再次,壓縮后的消息片段會加上消息認(rèn)證碼一起進行加密曹货。加密使用CBC模式讳推,初始向量是通過主密碼生成。
- 最后银觅,加密后的報文,再加上數(shù)據(jù)類型、版本號匀伏、壓縮后的長度組成的報頭镰吆,就是最終的數(shù)據(jù)報文帘撰。
握手協(xié)議通信過程
-
ClientHello(客戶端 -> 服務(wù)器)
- 客戶端向服務(wù)端發(fā)送自己的信息:可用的版本號、當(dāng)前時間万皿、客戶端隨機數(shù)摧找、會話ID、可用的密碼套件清單牢硅、可用的壓縮方式清單
- 可用的版本號蹬耘、可用的密碼套件清單、可用的壓縮方式清單:因為不同的瀏覽器可能支持的情況不一樣减余,所以需要發(fā)送給服務(wù)端以方便協(xié)商综苔。
- 當(dāng)前時間:TLS不使用,但是上層的協(xié)議有可能使用
- 客戶端隨機數(shù):后面會使用到
- 會話ID:客戶端和服務(wù)端需要重新使用之前的連接時位岔,會使用到此信息如筛。
-
ServerHello(服務(wù)器 -> 客戶端)
- 服務(wù)端向客戶端發(fā)送自己的信息:使用的版本號、當(dāng)前時間抒抬、服務(wù)器隨機數(shù)杨刨、會話ID、使用的密碼套件清單擦剑、使用的壓縮方式清單
- 使用的版本號妖胀、使用的密碼套件清單、使用的壓縮方式清單:這里發(fā)送的就是協(xié)商后的確定結(jié)果
- 當(dāng)前時間:TLS不使用惠勒,但是上層的協(xié)議有可能使用
- 服務(wù)器隨機數(shù):后面會使用到
-
Certificate(服務(wù)器 -> 客戶端)
- 就是發(fā)送服務(wù)器的證書
-
ServerKeyExchange(服務(wù)器 -> 客戶端)
- 如果Certificate不足以滿足需求時,則會發(fā)送ServerKeyExchange消息纠屋。具體的內(nèi)容根據(jù)密碼套件的不同而有所不同涂臣。
- 這個不是必須的
-
CertificateRquest(服務(wù)器 -> 客戶端)
- 簡單的說就是我們平時說的雙向認(rèn)證,即服務(wù)器找客戶端要其證書用來驗證
- 這個過程中巾遭,服務(wù)器會向客戶端發(fā)送這些消息:服務(wù)器能夠理解的證書類型肉康、服務(wù)器能夠理解的認(rèn)證機構(gòu)名稱清單
-
ServerHelloDone(服務(wù)器 -> 客戶端)
- 通知客戶端hello時間結(jié)束
-
Certificate(客戶端 -> 服務(wù)器)
- 第5步中如果服務(wù)器要了客戶端的證書,則發(fā)送給服務(wù)器
-
ClientKeyExchange(客戶端 -> 服務(wù)器)
- 這個就是最關(guān)鍵的一步灼舍,交換生成最終密鑰的關(guān)鍵素材
- 如果是使用的RSA,則會將經(jīng)過服務(wù)器公鑰加密的預(yù)備主密碼隨著ClientKeyExchange消息一起發(fā)送
- 如果是Diffie-Hellman密鑰交換涨薪,則隨著ClientKeyExchange消息一起發(fā)送的是Diffie-Hellman公開值
- 預(yù)備主密碼使得服務(wù)端和客戶端分別計算出相同的主密碼
- 主密碼作為關(guān)鍵的密鑰素材可以生成:對稱密碼的密鑰骑素、消息認(rèn)證碼的密鑰、對稱密碼的CBC模式中使用的初始化向量
-
CertificateVerify(客戶端 -> 服務(wù)器)
- 只有發(fā)送了第5步消息的時候刚夺,客戶端才會向服務(wù)器發(fā)送CertificateVerify消息
- 這個消息是為了向服務(wù)器證明献丑,自己確實是真實的客戶端末捣,擁有客戶端證書的私鑰。為了實現(xiàn)這個目的创橄,客戶端會計算主密碼和握手協(xié)議種傳送的消息的散列值加上自己的數(shù)字簽名后發(fā)送給服務(wù)器箩做。
-
ChangeCipherSpec(客戶端 -> 服務(wù)器)
- 這不是握手協(xié)議,而是密碼規(guī)格變更協(xié)議妥畏“畎睿客戶端告訴服務(wù)器我要換密碼了。
- 因為已經(jīng)雙方已經(jīng)交換了密碼套件信息醉蚁,可以開始切換密碼進行通信了燃辖。
-
Finished(客戶端 -> 服務(wù)器)
- 客戶端說我搞定了
-
ChangeCipherSpec(服務(wù)器 -> 客戶端)
- 服務(wù)器告訴客戶端,我要開始換密碼了
-
Finished(服務(wù)器 -> 客戶端)
- 服務(wù)器說我搞定了
切換至應(yīng)用數(shù)據(jù)協(xié)議
主密碼
- 主密碼是根據(jù)下面信息計算出來的:預(yù)備主密碼网棍、客戶端隨機數(shù)黔龟、服務(wù)器隨機數(shù)
- 如果是RSA,在握手的時候客戶端就會把預(yù)備主密碼發(fā)送給服務(wù)器滥玷;如果是Diffie-Hellman氏身,則會發(fā)送公開值給服務(wù)器,然后客戶端和服務(wù)器根據(jù)這個值生成預(yù)備主密碼
- 客戶端隨機數(shù)和服務(wù)器隨機數(shù)相當(dāng)于為了防止攻擊者事先計算出來的鹽值
- 使用主密碼生成對稱密碼的密鑰惑畴、消息認(rèn)證碼的密鑰蛋欣、對稱密碼的CBC模式中使用的初始化向量
對SSL/TLS的攻擊
- 既然是工具箱的組合,那么使用到的技術(shù)的攻擊手法都可以進行攻擊
- 對偽隨機數(shù)生成器的攻擊桨菜,主要是因為生成器的種子在時間和進程編號這樣可預(yù)測的范圍內(nèi)的數(shù)值
- 利用證書時間差進行攻擊豁状,就是CRL列表提交了注銷,但還未批準(zhǔn)的時間差
SSL/TLS用戶的注意事項
- 不要誤解證書的含義倒得。這點是最重要的泻红,就是通過證書認(rèn)證并不就代表服務(wù)器是正確的。很好理解霞掺,就是擁有合法身份證的人谊路,不一定是你要轉(zhuǎn)移錢的對象。
- 密碼通信前數(shù)據(jù)不受保護
- 密碼通信后數(shù)據(jù)不受保護