計算機網絡的OSI
七層模型和TCP/IP
四層模型想必你們都知道。其中SSL/TLS
是一種介與於傳輸層(好比TCP/IP
)和應用層(好比HTTP
)的協議。它經過"握手協議(Handshake Protocol)
"和"傳輸協議(Record Protocol)
"來解決傳輸安全的問題。SSL/TLS
是一個可選層,沒有它,使用HTTP
也能夠通訊,它存在的目的就是爲了解決安全問題,這也就是HTTPS
相對於HTTP
的精髓所在.算法
SSL:(Secure Socket Layer,安全套接字層)
TLS:(Transport Layer Security,傳輸層安全協議)
SSL:(Secure Socket Layer,安全套接字層),位於可靠的面向鏈接的網絡層協議和應用層協議之間的一種協議層。SSL經過互相認證、使用數字簽名確保完整性、使用加密確保私密性,以實現客戶端和服務器之間的安全通信。該協議由兩層組成:SSL記錄協議和SSL握手協議。瀏覽器
TLS:(Transport Layer Security,傳輸層安全協議),用於兩個應用程序之間提供保密性和數據完整性。該協議由兩層組成:TLS記錄協議和TLS握手協議。安全
SSL是Netscape開發的專門用戶保護Web通信的,目前版本爲3.0。最新版本的TLS 1.0是IETF(工程任務組)制定的一種新的協議,它創建在SSL 3.0協議規範之上,是SSL 3.0的後續版本。二者差異極小,能夠理解爲SSL 3.1,它是寫入了RFC的。 服務器
SSL/TLS
協議發展歷史參看下表,更詳細的發展歷史參看維基百科的SSL/TLS協議發展歷史。網絡
目前,應用最普遍的是TLS 1.0
,接下來是SSL 3.0
。可是,主流瀏覽器都已經實現了TLS 1.2
的支持。值得一提的是iOS9
的App
,需將HTTP
鏈接升級到HTTPS
,而且TLS
版本不得低於1.2
(固然升級爲HTTPS
並不是必須的)。session
上面提到SSL/TLS有兩個階段握手協議
和傳輸協議
,握手協議
就是創建起鏈接的過程,這個階段採用非對稱加密,這個過程完畢後會生成一個對話祕鑰
,從而傳輸協議
過程,就是用這個對話祕鑰
使用對稱加密進行傳輸。之因此這樣作,是由於,非對稱加密是很耗性能的。而握手協議過程當中,使用數字證書保證了公鑰的安全性。固然這個過程既能夠雙向證書驗證,也能夠只驗證服務端的證書單向證書驗證。這也是前兩節所做的鋪墊,不至於這兒看的太迷糊。dom
對應上圖第一步,客戶端發出請求,這一步客戶端主要向服務端提供如下信息:性能
SSL/TLS
協議版本(cipher suite)
(compression methods)
,用於後續的壓縮傳輸random_C(random number)
,客戶端有存留,稍後用於生成"對話密鑰(session key)"
收到客服端的請求以後,服務端向客戶端迴應如下信息:ui
SSL/TLS
協議版本,和本身的比較肯定使用的SSL/TLS
協議版本,若是沒有合適的,對話關閉random_S(random number)
,服務端有存留,稍後用於生成"對話密鑰(session key)"
客戶端收到服務端的迴應後,首先驗證服務端的數字證書,若是證書沒有問題繼續下去,若是證書有問題,則會有相應提示,或者對話直接關閉。而後客戶端在向服務端發送如下信息:編碼
pre-master key(random number)
,而且用服務端數字證書中的公鑰加密若是有客戶端的證書,就先驗證客戶端的證書
pre-master key
解密,這時客戶端和服務端各自有了三個隨機數,而後用原來協商的加密方式生成本次通話使用的會話密鑰(session key)
這時客戶端和服務端都有了session key
,而後握手協議階段就結束了。下面開始使用session key
對稱加密數據,進行傳輸,就進入了下一個階段,傳輸協議過程。
這塊的重點在與SSL/TSL
協議的握手協議過程。在第三步,客戶端驗證證書的時候,若是服務端的證書在系統默認信任證書列表中(系統會默認信任一些CA
認證中心的根證書)則會直接經過,若是沒有在系統默認信任證書列表中,瀏覽器可能會彈窗讓用戶選擇是否信任該證書,也有可能會直接關閉鏈接,提示用戶,證書不可信。而在App
內,若是想要信任未在系統信任列表中的證書,則須要在App
內提早置入服務端證書,關於這一點有講。而關於認證方式,大多數也都是採用的單向認證,也就是說僅僅認證服務端的證書,而像銀行等機構則多使用雙向認證的方式。
參考連接:http://www.jianshu.com/p/c93612b3abac https://kb.cnblogs.com/page/197396/