什么是SSL/TLS
不使用SSL/TLS的網(wǎng)絡(luò)通信,一般都是明文傳輸,網(wǎng)絡(luò)傳輸內(nèi)容在傳輸過程中很容易被竊聽甚至篡改,非常不安全。SSL/TLS協(xié)議就是為了解決這些安全問題而設(shè)計(jì)的。SSL/TLS協(xié)議位于TCP/IP協(xié)議之上,各個(gè)應(yīng)用層協(xié)議之下,使網(wǎng)絡(luò)傳輸?shù)膬?nèi)容通過加密算法加密,并且只有服務(wù)器和客戶端可以加密解密,中間人即使抓到數(shù)據(jù)包也無法解密獲取傳輸?shù)膬?nèi)容,從而避免安全問題。例如廣泛使用的HTTPS協(xié)議即是在TCP協(xié)議和HTTP協(xié)議之間加了一層SSL/TLS協(xié)議。
相關(guān)術(shù)語
在學(xué)習(xí)SSL/TLS協(xié)議之前,首先要了解一些相關(guān)概念:
- 對(duì)稱加密:加密和解密都采用同一個(gè)密鑰,常用的算法有DES、3DES、AES,相對(duì)于非對(duì)稱加密算法更簡(jiǎn)單速度更快。
- 非對(duì)稱加密:和對(duì)稱加密算法不同,非對(duì)稱加密算法會(huì)有兩個(gè)密鑰:公鑰(可以公開的)和私鑰(私有的),例如客戶端如果使用公鑰加密,那么即時(shí)其他人有公鑰也無法解密,只能通過服務(wù)器私有的私鑰解密。RSA算法即是典型的非對(duì)稱加密算法。
- 數(shù)字證書:數(shù)字證書是一個(gè)包含公鑰并且通過權(quán)威機(jī)構(gòu)發(fā)行的一串?dāng)?shù)據(jù),數(shù)字證書很多需要付費(fèi)購(gòu)買,也有免費(fèi)的,另外也可以自己生成數(shù)字證書,本文中將會(huì)采用自簽名的方式生成數(shù)字證書。
SSL/TLS流程
使用SSL/TLS協(xié)議的服務(wù)器和客戶端開始通信之前,會(huì)先進(jìn)行一個(gè)握手階段:
客戶端發(fā)出請(qǐng)求:這一步客戶端會(huì)生成一個(gè)隨機(jī)數(shù)傳給服務(wù)器;
服務(wù)器回應(yīng):這一步服務(wù)器會(huì)返回給客戶端一個(gè)服務(wù)器數(shù)字證書(證書中包含用于加密的公鑰),另外服務(wù)器也會(huì)生成一個(gè)隨機(jī)數(shù)給客戶端;
客戶端回應(yīng):這一步客戶端首先會(huì)校驗(yàn)數(shù)字證書的合法性,然后會(huì)再生成一個(gè)隨機(jī)數(shù),這個(gè)隨機(jī)數(shù)會(huì)使用第2步中的公鑰采用非對(duì)稱加密算法(例如RSA算法)進(jìn)行加密后傳給服務(wù)器,密文只能通過服務(wù)器的私鑰來解密。
服務(wù)器最后回應(yīng):握手結(jié)束。
握手結(jié)