程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> SSL原理及應用(1)SSL協議體系結構

SSL原理及應用(1)SSL協議體系結構

編輯:關於.NET

SSL(Secure Sockets Layer ,安全套接層),是為網絡通信提供安全及數據完整性的一種安全協議。由Netscape研發,用以保障在Internet上數據傳輸的安全,利用數據加密(Encryption)技術,確保數據在網絡上的傳輸過程中不會被截取及竊聽。

當前幾乎所有浏覽器都支持SSL,但是支持的版本有所不同。從圖8-1中可以看到,IE同時支持SSL 2.0和SSL 3.0兩個版本。

圖8-1            IE支持的SSL版本

事實上各位讀者已經明白了SSL的工作原理,回顧我前面博客講到的公鑰加密的通信原理,而SSL使用的就是公鑰加密系統。現在完全可以構想基於SSL的數據通信流程。前面說過,SSL是一種協議,本節重點在於協議本身和它是如何工作在各種協議之間來提供安全通信的。

SSL協議位於TCP/IP協議模型的網絡層和應用層之間,使用TCP來提供一種可靠的端到端的安全服務,它使客戶/服務器應用之間的通信不被攻擊竊聽,並且始終對服務器進行認證,還可以選擇對客戶進行認證。SSL協議在應用層通信之前就已經完成加密算法、通信密鑰的協商,以及服務器認證工作,在此之後,應用層協議所傳送的數據都被加密。

SSL協議體系結構如圖8-2所示。

圖8-2            SSL協議體系結構

從體系結構圖可以看出,SSL協議可分為兩層:

q  SSL記錄協議(SSL Record Protocol):建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。

q  SSL握手協議(SSL Handshake Protocol):建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。SSL協議實際上是SSL握手協議、SSL修改密文協議、SSL警告協議和SSL記錄協議組成的一個協議族。下面分別進行介紹。

SSL記錄協議

SSL記錄協議為SSL連接提供兩種服務:機密性和報文完整性。

在SSL協議中,所有的傳輸數據都被封裝在記錄中。記錄是由記錄頭和記錄數據(長度不為0)組成的。所有的SSL通信都使用SSL記錄層,記錄協議封裝上層的握手協議、報警協議、修改密文協議。SSL記錄協議包括記錄頭和記錄數據格式的規定。

SSL記錄協議定義了要傳輸數據的格式,它位於一些可靠的傳輸協議之上(如TCP),用於各種更高層協議的封裝。主要完成分組和組合、壓縮和解壓縮,以及消息認證和加密等。

SSL記錄協議主要操作流程如圖8-3所示。

圖8-3            SSL記錄協議的操作流程

圖中的五個操作簡單介紹如下:

1)每個上層應用數據被分成214字節或更小的數據塊。記錄中包含類型、版本號、長度和數據字段。

2)壓縮是可選的,並且是無損壓縮,壓縮後內容長度的增加不能超過1024字節。

3)在壓縮數據上計算消息認證MAC。

4)對壓縮數據及MAC進行加密。

5)增加SSL記錄。

SSL記錄協議字段的結構如圖8-4所示。

圖8-4            SSL記錄協議字段的結構

如圖8-4 SSL記錄協議字段結構主要由內容類型、主要版本、次要版本、壓縮長度組成,簡介如下:

1)        內容類型(8位):封裝的高層協議。

2)        主要版本(8位):使用的SSL主要版本。對於SSL v3已經定義的內容類型是握手協議、警告協議、改變密碼格式協議和應用數據協議。

3)        次要版本(8位):使用的SSL次要版本。對於SSL v3.0,值為0。

4)        壓縮長度(16位):明文數據(如果選用壓縮則是壓縮數據)以字節為單位的長度。

說明已經定義的內容類型是握手協議、警告協議、修改密文協議。

SSL報警協議

SSL報警協議是用來為對等實體傳遞SSL的相關警告。如果在通信過程中某一方發現任何異常,就需要給對方發送一條警示消息通告。警示消息有兩種:

q   Fatal錯誤,如傳遞數據過程中發現錯誤的MAC,雙方就需要立即中斷會話,同時消除自己緩沖區相應的會話記錄。

q  Warning消息,這種情況,通信雙方通常都只是記錄日志,而對通信過程不造成任何影響。SSL握手協議可以使得服務器和客戶能夠相互鑒別對方,協商具體的加密算法和MAC算法以及保密密鑰,用來保護在SSL記錄中發送的數據。

SSL修改密文協議

為了保障SSL傳輸過程的安全性,客戶端和服務器雙方應該每隔一段時間改變加密規范。所以有了SSL修改密文協議。SSL修改密文協議是3個高層的特定協議之一,也是其中最簡單的一個。在客服端和服務器完成握手協議之後,它需要向對方發送相關消息(該消息只包含一個值為1的單字節),通知對方隨後的數據將用剛剛協商的密碼規范算法和關聯的密鑰處理,並負責協調本方模塊按照協商的算法和密鑰工作。

SSL握手協議

SSL握手協議被封裝在記錄協議中,該協議允許服務器與客戶機在應用程序傳輸和接收數據之前互相認證、協商加密算法和密鑰。在初次建立SSL連接時,服務器與客戶機交換一系列消息。

這些消息交換能夠實現如下操作:

q  客戶機認證服務器

q  允許客戶機與服務器選擇雙方都支持的密碼算法

q  可選擇的服務器認證客戶

q  使用公鑰加密技術生成共享密鑰

q  建立加密SSL連接

SSL握手協議報文頭包括三個字段:

q  類型(1字節):該字段指明使用的SSL握手協議報文類型。

q  長度(3字節):以字節為單位的報文長度。

q  內容(≥1字節):使用的報文的有關參數。

SSL握手協議的報文類型如表8-1所示。

表8-1  SSL握手協議報文類型

查看本欄目

SSL握手協議過程如圖8-5所示。

圖8-5            SSL握手協議的過程(帶*的傳輸是可選的,或者與站點相關的,並不總是發送的報文)

現在看圖8-5,分步說明SSL握手協議的全過程:

步驟1      建立安全能力。

客戶機向服務器發送client_hello報文,服務器向客戶機回應server_hello報文。建立的安全屬性包括:協議版本、會話ID、密文族、壓縮方法,同時生成並交換用於防止重放攻擊的隨機數。密文族參數包括密鑰交換方法(Deffie-Hellman密鑰交換算法、基於RSA的密鑰交換和另一種實現在Fortezza chip上的密鑰交換)、加密算法(DES、RC4、RC2、3DES等)、MAC算法(MD5或SHA-1)、加密類型(流或分組)等內容。

步驟2      認證服務器和密鑰交換。

在hello報文之後,如果服務器需要被認證,服務器將發送其證書。如果需要,服務器還要發送server_key_exchange;然後,服務器可以向客戶發送certificate_request請求證書。服務器總是發送server_hello_done報文,指示服務器的hello階段結束。

步驟3      認證客戶和密鑰交換。

客戶一旦收到服務器的server_hello_done報文,客戶將檢查服務器證書的合法性(如果服務器要求),如果服務器向客戶請求了證書,客戶必須發送客戶證書,然後發送client_key_exchange報文,報文的內容依賴於client_hello與server_hello定義的密鑰交換的類型。最後,客戶可能發送client_verify 報文來校驗客戶發送的證書,這個報文只能在具有簽名作用的客戶證書之後發送。

步驟4      結束。

客戶發送change_cipher_spec報文並將掛起的CipherSpec復制到當前的CipherSpec。這個報文使用的是修改密文協議。然後,客戶在新的算法、對稱密鑰和MAC秘密之下立即發送finished報文。finished報文驗證密鑰交換和鑒別過程是成功的。服務器對這兩個報文響應,發送自己的change_cipher_spec報文、finished報文。握手結束,客戶與服務器可以發送應用層數據了。

當客戶從服務器端傳送的證書中獲得相關信息時,需要檢查以下內容來完成對服務器的認證:

q   時間是否在證書的合法期限內;

q   簽發證書的機關是否客戶端信任的;

q   簽發證書的公鑰是否符合簽發者的數字簽名;

q   證書中的服務器域名是否符合服務器自己真正的域名。

服務器被驗證成功後,客戶繼續進行握手過程。

同樣地,服務器從客戶傳送的證書中獲得相關信息認證客戶的身份,需要檢查:

q   用戶的公鑰是否符合用戶的數字簽名;

q   時間是否在證書的合法期限內;

q   簽發證書的機關是否服務器信任的;

q   用戶的證書是否被列在服務器的LDAP裡用戶的信息中;

q   得到驗證的用戶是否仍然有權限訪問請求的服務器資源。

---------------注:本文部分內容改編自《.NET 安全揭秘》

作者:玄魂

出處:http://www.cnblogs.com/xuanhun/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved