Web在當今已經是十分流行的工具,伴隨著Internet的流行,Web的安全性已經變得十分重要。目前在Web方面的安全性有不少解決方案,最常用的是安全套接字層協議。
SSL(Secure Sockets Layer,SSL)協議是由Netscape公司提出的1個安全協議,它是在套接字端口上工作,可以用在任何建立在套接字端口上的協議,包括telnet、ftp、http等等。很多SSL的功能也是IPv6的一部分。SSL提供了對一個對話(session)進行加密、對1個服務器(有時一個客戶機)甚至一個信息進行鑒別的功能,SSL握手協議和應用協議都在SSL記錄協議上操作。SSL記錄層運行在TCP上。對話建立需要5到8個信息來完成,對于服務器的鑒別,SSL建筑在密鑰認證機制的基礎上,但是,在1個對話內SSL不提供密鑰重新協商功能。
所有SSL協議可以傳送最高達32 767 B的數據,每一個數據有一個2或3B的協議頭,這個協議頭包含了1個安全轉義功能、一個指明是否有填充信息的標志、信息的長度等信息,2B的頭表示沒有填充而3B則表示有填充的信息。協議頭數據結構如下:
#S長度 |
長度 |
填充長度 |
這里,#位為0表示3B頭部,最大長度32767B;為1表示2B頭部,最大長度16383B。S位表示安全轉義功能是否存在。在SSL記錄協議頭部,沒有協議版本信息。
在一個記錄內,有三種部件:MAC-DATA、實際數據(Actual-Data)和填充數據(Padding-Data)。MAC代表信息鑒別碼(Message Authentication Code),實際數據是需要發送的實際數據,填充數據就是在數據不到有關長度時用作填充的無用數據。MAC-DATA是一個密鑰、數據、填充以及序號的哈稀(hash)函數,這個密鑰是(發送者)寫密鑰,它和(接受者)讀密鑰是相同的。對于基于塊的加密方法,可能數據不是正好加密所需的塊長度(或塊長度的倍數),這時就需要填充數據。
序號是一個32位無符號的整數,每發送一個數據,就調整這個序號,當數字大于0xFFFFFFFF時,重新設置為0。如果發送錯誤,如鑒別失敗、解密失敗、或其他問題,會產生I/O差錯,同時關閉連接。
當一臺計算機企圖使用SSL建立連接時發生握手操作,在SSL中,有3類基本握手,第一類是最近(比如100s)沒有連接存在,第二類是有一系列的連接存在時的握手,第三類是當需要客戶機鑒別時的握手。
第一類握手的基本過程如圖1所示。當一個客戶機希望建立安全連接,它發送CLIENT-HELLO消息,包括一個質疑以及希望或能夠支持的加密體系;服務器以SERVER-HELLO消息作為回答,包括連接標識、密鑰證書以及服務器可以支持的加密體系,加密體系的選擇由客戶機負責;然后,客戶機檢驗服務器的公開密鑰,并且向服務器發送CLIENT-MASTER-KEY消息,這是一個隨機產生的主密鑰,這個密鑰在發送時由服務器的公開密鑰加密;發送CLIENT-MASTER-KEY后,客戶機發送CLIENT-FINISHED消息,包括被客戶寫密鑰加密的連接標識;服務器發送SERVER-VERIFY消息,包括一個被服務器寫密鑰加密的對客戶機的質疑;最后,服務器發送SERVER-FINISHED消息,包含了一個被服務器寫密鑰加密的新的對話標識。服務器寫密鑰從CLIENT-MASTER-KEY消息中的主密鑰中產生。
圖1:SSL第一類握手協議
對于第二類握手,整個過程基本相似,如圖2所示。如果已經存在一個對話,那么,客戶機發送CLIENT-HELLO消息,包括一個質疑、對話標識以及希望或能夠支持的加密體系;服務器以SERVER-HELLO消息作為回答,包括連接標識、密鑰證書以及服務器可以支持的加密體系,這時設置“對話標識命中”位;客戶機發送CLIENT-FINISHED消息,包括被客戶寫密鑰加密的連接標識;服務器發送SERVER-VERIFY消息,包括一個被服務器寫密鑰加密的對客戶機的質疑;最后,服務器發送SERVER-FINISHED消息,包含了一個被服務器寫密鑰加密的對話標識。
圖2:SSL第二類握手協議
對于第三類握手方式,需要使用客戶機鑒別,那么,服務器必須在適當的時間發送REQUEST-CERTIFICATE消息,包括一個質疑和期望的鑒別方法,客戶機以CLIENT-CERTIFICATE消息作為回答,這個消息包括客戶機的證書類型、證書本身以及其他回答數據,最后服務器才發送SERVER-FINISH消息,如圖3所示。
圖3:SSL第三類握手協議
整個過程中使用了好幾個密鑰:服務器公開密鑰、主密鑰、客戶機讀密鑰、客戶機寫密鑰等等。客戶機寫密鑰和客戶機讀密鑰從主密鑰、順序字、質疑、連接標識等的安全哈稀(Secure Hash)算法得到。常用的哈稀算法是MD5算法。
如前所述,SSL實際上是應用層(如HTTP協議,瀏覽器使用)和運輸層(TCP,Internet的傳輸控制協議)之間的協議,它的兩個主要目標是為私有信息的安全交換提供加密方法以及提供認證服務,這樣用戶可以知道服務器是它所聲稱的。它加密應用層產生的信息M,然后把結果傳給運輸層,再傳送給服務器端的運輸層。那個運輸層再傳給它的SSL實體,這里它被解密為M,最后傳給服務器應用層。
SSL已經開發出很多版本,每一種都比前一種安全有提高,且有更多的選項。
最后,我們再簡單提一下TLS(Transport Layer Security)。TLS是IETF為最終替代SSL的目的而基于SSL 3.0開發的。TLS和SSL間有一些差異,比如,怎樣定義填充字符以產生正確長度的塊和TLS支持附加的報警碼(當有不正確情況時報警給用戶的碼字)等。盡管TLS和SSL一般不互通信,不過TLS有能力恢復為SSL 3.0。