文章目錄
SSL協議簡介
SSL協議概述
- SSL協議可用於保護正常運行於TCP之上的任何應用協議,如HTTP、FTP、SMTP或Telnet的通信,最常見的是用SSL來保護HTTP的通信
- SSL協議的優點在於它是與應用層協議無關的。高層的應用協議(如HTTP、FTP、Telnet等)能透明的建立於SSL協議之上。
- SSL協議在應用層協議之前就已經完成加密算法、通信密鑰的協商以及服務器的認證工作。在此之後應用層協議所傳輸的數據都會被加密,從而保證通信的安全性。
SSL解決的問題(功能)
- 客戶對服務器的身份認證
SSL服務器允許客戶的瀏覽器使用標準的公鑰加密技術和一些可靠的認證中心(CA)的證書,來確認服務器的合法性。 - 服務器對客戶的身份認證
也可通過公鑰技術和證書進行認證,也可通過用戶名,password來認證。 - 建立服務器與客戶之間安全的數據通道
SSL要求客戶與服務器之間的所有發送的數據都被髮送端加密、接收端解密,同時還檢查數據的完整性。
SSL在協議棧的位置
SSL協議工作原理
SSL協議的分層模型
SSL協議是一個分層的協議,共有兩層組成。處於SSL協議的底層的是SSL記錄層協議(SSL Record Protocol),它位於可靠的傳輸層協議(TCP)之上,用於封裝高層協議的數據。其中SSL握手協議(SSL Handshake Protocol)允許服務方和客戶方互相認證,並在應用層協議傳輸數據之前協商出一個加密算法和會話密鑰。
SSL體系結構
SSL連接(connection)
- 一個連接是一個提供一種合適類型服務的傳輸(OSI分層的定義)
- SSL的連接是點對點的關係
- 連接時暫時的,每一個連接和一個會話關聯
SSL會話(session)
- 一個SSL會話是在客戶與服務器之間的一個關聯。會話由Handshake Protocol創建。會話定義了一組可供多個連接共享的密碼安全參數
- 會話用以避免爲每一個連接提供新的安全參數所需昂貴的協商代價
在任意一對通信主體之間,可以有多個安全連接
工作流程
- 網絡連接建立、SSL客戶端發送消息,消息中包含SSL版本號、密碼設置、可實現的算法列表、隨機數以及服務器使用SSL協議通信所需的其他信息
- SSL服務器端迴應消息,確定SSL 版本號、加密算法和壓縮算法
- SSL服務器發出服務器數字證書
- SSL客戶端的身份認證是可選的
- 客戶端生成預主密鑰pre_master_secret,用服務器的公鑰加密後返回服務器,服務器利用自己的私鑰解密後得到會話密鑰
- 若服務器要求客戶認證,客戶機會向服務器隨機加密的pre_master_secret一起發送簽名的數據和客戶自己的證書
- 服務器若認證成功,使用私鑰加密pre_master_secret,然後執行一系列步驟生成master secret。否則會話終止
- 客戶機與服務器使用master secret 生成會話密鑰該密鑰是對稱密鑰,用於加密和解密在SSL會話期間交換的信息,檢驗信息完整性
- C→S:發送消息通知以後從客戶機來的消息將會用會話密鑰加密。客戶機然後發送一條獨立的(加密的)消息表明握手的客戶機部分已經完成
- 應用數據的傳輸過程爲:
1)應用程序把應用數據提交給本地的SSL
2)發送端的SSL根據需要:
a)使用指定的壓縮算法,壓縮應用數據
b)使用散列算法對壓縮後的數據計算散列值
c)把散列值和壓縮數據一起用加密算法加密
3)密文通過網絡傳給對方
4)接收方的SSL
用相同的加密算法對密文解密,得到明文
用相同的散列算法對明文中的應用數據散列
計算得到的散列值與銘文中的散列值比較
5)如果一致,則明文有效,接收方的SSL把明文解壓後得到應用數據上交給應用層。否則就丟棄數據,並向發送方發出告警信息。嚴重的錯誤有可能引起再次的協商或連接中斷。
SSL握手協議的功能
- 協商SSL協議的版本
- 協商加密套件
- 協商密鑰參數
- 驗證通訊雙方的身份(可選)
- 建立SSL連接
SSL握手協議的握手過程
- 無客戶端認證的全握手過程
- 有客戶端認證的全握手過程
- 會話恢復過程
SSL記錄層的功能
- 保護傳輸數據的私密性,對數據進行加密和解密
- 驗證傳輸數據的完整性,計算報文的摘要
- 提高傳輸數據的效率,對報文進行壓縮
- 保證數據傳輸的可靠和有序
SSL記錄層的報文格式
協議脆弱性分析
客戶端假冒
- 因爲SSL協議設計初衷是對Web站點及網上交易進行安全性保護,使消費者明白正在和誰進行交易要比使商家知道誰正在付費更爲重要,爲了不至於由於安全協議的使用而導致網絡性能大幅度下降,SSL協議並不是默認地要求客戶鑑別,這樣做雖然有悖於安全策略,但卻促進了SSL的廣泛應用。
- 針對這個問題,可在必要的時候配置SSL協議,使其選擇對客戶端進行認證鑑別。
無法保護UDP應用
- SSL協議需要在握手之前建立TCP連接,因此不能對UDP應用進行保護。如果要兼顧UDP協議層之上的安全保護,可以採用IP層的安全解決方案。
SSL協議不能對抗流量分析
- 由於SSL只對應用數據進行保護,數據包的IP包和TCP頭仍然暴露在外,通過檢查沒有加密的IP源和目的地址以及TCP端口號或者檢查通信數據量,一個通信分析者依然可以揭示哪一方在使用什麼服務,有時甚至揭露商業或私人關係的祕密。
進程中主密鑰泄露
- 除非SSL的工程實現大部分駐留在硬件中,否則主密鑰將會存留在主機的主儲存器中,這就意味着任何可以讀取SSL進程存儲空間的攻擊者都能讀取主密鑰,因此,不可能面對掌握機器管理特權的攻擊者而保護SSL連接。這個問題要依靠用戶管理策略來解決。