用SSL安全協(xié)議實現(xiàn)WEB服務器的安全性
用SSL 安全協(xié)議實現(xiàn)WEB 服務器的安全性現(xiàn)今SSL 安全協(xié)議廣泛地用在Internet 和Intranet 的服務器產品和客戶端產品中,用于安全地傳送數據,集中到每個WEB 服務器和瀏覽器中,從而
用SSL 安全協(xié)議實現(xiàn)WEB 服務器的安全性
現(xiàn)今SSL 安全協(xié)議廣泛地用在Internet 和Intranet 的服務器產品和客戶端產品中,用于安全地傳送數據,集中到每個WEB 服務器和瀏覽器中,從而來保證來用戶都可以與Web 站點安全交流 。本文將詳細介紹SSL 安全協(xié)議及在WEB 服務器安全的應用。
一、SSL 安全協(xié)議在WEB 服務器中的應用
1、我們?yōu)樘峁┚哂姓嬲踩B接的高速安全套接層SSL )交易,可以將PCI 卡形式的SSL 卸載(offloading )設備直接安裝到Web 服務器上,這種做法的好處是:
(1)從客戶機到安全Web 服務器的數據安全性;
(2)由于卸載工具執(zhí)行所有SSL 處理過程并完成TCP/IP協(xié)商,因此大大提高了吞吐量;
(3)簡化了密鑰的管理和維護。
安全性加大在實現(xiàn)向電子商務和其它安全Web 站點的服務器增加SSL 加速和卸載設備的結果是提高了交易處理速度。但是由于設備是作為應用被安裝在網絡上的,因此設備與安全服務器之間的數據是未加密的。將SSL 卸載設備作為PCI 擴展卡直接安裝在安全服務器上,保證了從瀏覽器到服務器的連接安全性。
SSL 可以用于在線交易時保護象信用卡號以及股票交易明細這類敏感信息。受SSL 保護的網頁具有"https" 前綴,而非標準的"http" 前綴
2、新型專用網絡設備SSL 加速器可以使Web 站點通過在優(yōu)化的硬件和軟件中進行所有的SSL 處理來滿足性能和安全性的需要。
當具有SSL 功能的瀏覽器(Navigator 、IE) 與Web 服務器(Apache、IIS) 通信時,它們利用數字證書確認對方的身份。數字證書是由可信賴的第三方發(fā)放的,并被用于生成公共密鑰。
當最初的認證完成后,瀏覽器向服務器發(fā)送48字節(jié)利用服務器公共密鑰加密的主密鑰,然后Web 服務器利用自己的私有密鑰解密這個主密鑰。最后,瀏覽器和服務器在會話過程中用來加解密的對稱密鑰集合就生成了。加密算法可以為每次會話顯式地配置或協(xié)商,最廣泛使用的加密標準為" 數據加密標準" (DES )和RC4。
一旦完成上述啟動過程,安全通道就建立了,保密的數據傳輸就可以開始了。盡管初始認證和密鑰生成對于用戶是透明的,但對于Web 服務器來說,它們遠非透明。由于必須為每次用戶會話執(zhí)行啟動過程,因而給服務器CPU 造成了沉重負擔并產生了嚴重的性能瓶頸。據測試,當處理安全的SSL 會話時,
,標準的Web 服務器只能處理1%到10%的正常負載。
二、應做的處理
密碼在加解密數據時,使用兩種類型的密鑰。私有密鑰被發(fā)給各實體并且永遠不向外透露,公共密鑰可以任意分發(fā)。這兩種密鑰對于認證過程是必不可少的。使用公鑰加密的數據不能使用同一個密鑰進行解密,必須使用私有密鑰進行解密。
SSL 使用復雜的數學公式進行數據加密和解密,這些公式的復雜性根據密碼的強度不同而不同。高強度的計算會使多數服務器停頓,導致性能下降。多數Web 服務器在執(zhí)行SSL 相關任務時,吞吐量會顯著下降,性能比在只執(zhí)行HTTP 1.0連接時的速度慢50多倍。而且由于SSL 復雜的認證方案和加/解密算法,SSL 需要大量地消耗CPU 資源,從而造成Web 服務器性能很大的下降。它所造成的服務器瓶頸使Web 站點的速度慢如蝸牛爬行,這無疑會失去在線客戶。
為解決這種性能上的損失,我們可以通過安裝SSL 加速器和卸載器來減少SSL 交易中的時延。加速器通過執(zhí)行一部分SSL 處理任務來提高交易速度,同時依靠安全Web 服務器軟件完成其余的任務。卸載器承擔所有SSL 處理任務并且不需要安全Web 服務器軟件,從而使Web 服務器可以以同樣的高速度提供安全和非安全的服務。由于密鑰管理和維護過程不依靠對應用軟件的手工配置,因此使用卸載器效率會更高一些。
多數這類設備作為網絡應用被安裝在機架式或小底座網絡設備上,由于它們?yōu)檎麄€網絡提供加解密服務,因此設備與Web 服務器之間的數據是未加密的。
通過直接在服務器上安裝SSL 卸載器,可以解決速度和安全性問題。加密的數據由客戶機經過Internet 和網絡直接傳送到一臺服務器上。安裝在這臺服務器上的卸載器對數據進行解密并將其沿PCI 總線直接傳送到處理器。這樣做的結果是宿主服務器在保證客戶機與服務器之間傳輸時數據安全性的同時,以非安全交易服務同樣的速度提供了安全交易服務。
SSL 加速設備的出現(xiàn)就是為了解決對CPU 資源過量需求的SSL 協(xié)議所造成的性能問題,這類設備是一些用以在不增加Web 服務器負擔的條件下處理SSL 任務的特殊的網絡部件。通過優(yōu)化硬件和軟件,專用SSL 加速器處理SSL 會話的速度為標準Web 服務器的10到40倍。此外,SSL 加速器解放了服務器資源,使這些資源可以真正用于處理應用邏輯和數據庫查詢,從而加快了整個站點的速度。
將SSL 設備集成到網絡中很簡單,第4層到第7層交換機或負載均衡設備被配置為將所有的443端口(Https )請求改向傳送到SSL 設備。這時,這臺設備承擔所有的SSL 處理任務,因而立即解脫了Web
,服務器的負載。隨著安全傳輸流容量的增加,在不增加不必要的管理負擔的條件下,可以再部署其他SSL 設備。
最近,SSL 加速器功能已經被集成到象服務器端緩存(即所謂的" 服務器加速器" )這類Web 內容提交產品中了。這種作法的主要好處是,服務器加速器進行SSL 處理和對象提交。
配置SSL 功能的服務器加速器使廣泛地將SSL 用于Web 基礎設施上的安全內容交換成為可能,安全網頁將快速地得到提交,安全交易也將迅速地完成。
三、如何實現(xiàn)WEB 和Internet 安全
我們在安裝好Certificate Server后,給自己的Web Server發(fā)一張證書,安全站點已經建立起來了,在IIS 管理器中打開安全通道(先不要接受客戶證書驗證,如果沒有瀏覽器證書的話),把http 改為https 后訪問的站點,怎么系統(tǒng)提示服務器證書有問題?記得在瀏覽器中安裝的根證書了? 要不就是服務器證書過期了,如果沒有在瀏覽器中安裝根證書,就要安裝它,同時其他人通過Internet 訪問站點如果沒有安裝根證書,需要將根證書放在網上讓別人下載。用IE 安裝根證書很簡單,瀏覽器提示用戶打開或保存時選擇打開,會看到根證書信息然后按安裝證書就可以了。但可能會發(fā)現(xiàn)Netscap 無法安裝根證書,SSL 協(xié)議是由Netscape 首先提出并實現(xiàn)的,Netscape 使用MIME 類型application/x-x509-ca-cert來表示CA 證書,IE3.1以后開始支持SSL ,起初Windows 系統(tǒng)的數字證書文件(.crt 和.cer )也采用相同的MIME 類型,IE5.0以后MIME 類型被改為application/pkix-cert這就造成Netscape 安裝根證書困難。不過這個問題好解決,只要在IIS 里新注冊application/x-x509-ca-cert的MIME 類型就可以了。剛發(fā)的證書瀏覽器有時也會顯示證書過期,這是因為瀏覽器判斷證書有效是從證書有效起始時間的后一天開始,此外數字證書中的日期大都是GMT 時間而不是本地時間,所以通常將本機時間向后調整一天這個問題就能解決,所以證書過期不僅僅可能表示太晚也可能表示太早。
一切都已經就緒,進入安全網頁了,在IE 的狀態(tài)欄里應該有一個小鎖,雙擊這個小鎖能看到站點證書信息,同時也能看到整個證書鏈?,F(xiàn)在也許會問" 那么現(xiàn)在我怎么用SSL 加密我的數據呢?" ,實際上現(xiàn)在瀏覽器和Web 服務器之間交換的所有信息都已經被加密,SSL 是工作在網絡層與會話層之間的協(xié)議,它在TCP/IP和HTTP 之間增加了一個加密層,所以對于工作在HTTP 協(xié)議以上的用戶而言,加密是完全透明的,所以請忘記" 用SSL 加密" 這句話,除非直接在Socket 上開發(fā),比如寫個網絡螞蟻之類的。
現(xiàn)在想用SSL 實現(xiàn)更多的東西,不僅僅是加密。是申請瀏覽器(客戶)證書的時候了,申請客戶證書
,過程也不復雜,除了相同的名稱,國家之類的還多一個EMail 地址,如果用IE 申請證書可能會有許多選項,其中有兩個比較有意義," 允許私鑰被導出" 對與不在固定機器上上網的人比較有用,如果在一臺機器上申請了證書,導出證書和私鑰并安裝到其他機器上就可以在其他機器上使用了。" 用戶保護" 會讓瀏覽器在使用的私鑰時提示,這通常發(fā)生在加密和簽名過程之前。證書安裝過程通常都是自動的,安裝完成后可以欣賞一下,在IE 中打開Internet 選項,選擇內容一欄,按" 證書" 按鈕" ,在個人一欄內應該有客戶證書。
現(xiàn)在在IIS 管理器中設置站點要求客戶證書,然后訪問站點,瀏覽器會彈出一個對話框,讓選擇要使用的客戶證書,然后就進去了,也沒什么不同。那么怎么樣利用SSL 實現(xiàn)身份認證呢?首先可以在IIS 管理器中啟用客戶證書映射,將客戶證書影射到NT 帳號,可以映射某張證書,也可以映射所有根證書所簽發(fā)的客戶證書,如果在簽發(fā)者列表中找不到根證書,需要運行SSLCA.exe (IIS4.0以上),以后的事就屬于NT 管理員的范疇了。如果不想用NT 的安全機制,就需要獲取對方客戶證書的信息,然后進行判斷。通??蛻糇C書的信息由HTTPS_開頭的服務器變量提供,如Apache Server,Domino 等,可以查看文檔或者寫一個小的CGI 程序列出所有的服務器變量。如果是IIS 就更簡單了:
SSL 原理解密
RSA 公鑰加密在計算機產業(yè)中被廣泛使用在認證和加密。可以從RSA Data Security Inc.獲得的RSA 公鑰加密許可證。公鑰加密是使用一對非對稱的密碼加密或解密的方法。每一對密碼由公鑰和私鑰組成。公鑰被廣泛發(fā)布。私鑰是隱密的,不公開。用公鑰加密的數據只能夠被私鑰解密。反過來,使用私鑰加密的數據只能用公鑰解密。這個非對稱的特性使得公鑰加密很有用。
使用公鑰加密法認證
認證是一個身份認證的過程。在下列例子中包括甲和乙,公鑰加密會非常輕松地校驗身份。符號{數據} key意味著" 數據" 已經使用密碼加密或解密。假如甲想校驗乙的身份。乙有一對密碼,一個是公開的,另一個是私有的。乙透露給甲他的公鑰。甲產生一個隨機信息發(fā)送給乙。 甲——〉乙:random-message
乙使用他的私鑰加密消息,返回甲加密后的消息。 乙——〉甲:{random-message}乙的私鑰
甲收到這個消息然后使用乙的以前公開過的公鑰解密。他比較解密后的消息與他原先發(fā)給乙的消息。如果它們完全一致,就會知道在與乙說話。任意一個中間人不會知道乙的私鑰,也不能正確加密
,甲檢查的隨機消息。
除非你清楚知道你加密的消息。用私鑰加密消息,然后發(fā)送給其他人不是一個好主意。因為加密值可能被用來對付你,需要注意的是:因為只有你才有私鑰,所以只有你才能加密消息。所以,代替加密甲發(fā)來的原始消息,乙創(chuàng)建了一個信息段并且加密。信息段取自隨機消息(random-message )并具有以下有用的特性:
1. 這個信息段難以還原。任何人即使偽裝成乙,也不能從信息段中得到原始消息;
2. 假冒者將發(fā)現(xiàn)不同的消息計算出相同的信息段值;
3. 使用信息段,乙能夠保護自己。他計算甲發(fā)出的隨機信息段,并且加密結果,并發(fā)送加密信息段返回甲。甲能夠計算出相同的信息段并且解密乙的消息認證乙。
這個技術僅僅描繪了數字簽名。通過加密甲產生的隨機消息,乙已經在甲產生的消息簽名。因此我們的認證協(xié)議還需要一次加密。一些消息由乙產生:
甲——〉乙:你好,你是乙么?
乙——〉甲:甲,我是乙
{信息段[甲,我是乙] } 乙的私鑰
當你使用這個協(xié)議,乙知道他發(fā)送給乙的消息,他不介意在上面簽名。他先發(fā)送不加密的信息," 甲,我是乙。" ,然后發(fā)送信息段加密的消息版本。甲可以非常方便地校驗乙就是乙,同時,乙還沒有在他不想要的信息上簽名。
提交公鑰
,那么,乙怎樣以可信的方式提交他的公鑰呢?看看認證協(xié)議如下所示:
甲——〉乙:你好
乙——〉甲:嗨,我是乙,乙的公鑰
甲——〉乙:prove it
乙——〉甲:甲,我是乙 {信息段[甲,我是乙] } 乙的私鑰
在這個協(xié)議下,任何人都能夠成為" 乙" 。所有你所要的只是公鑰和私鑰。你發(fā)送給甲說你就是乙,這樣你的公鑰就代替了乙的密碼。然后,你發(fā)送用你的私鑰加密的消息,證明你的身份。甲卻不能發(fā)覺你并不是乙。 為了解決這個問題,標準組織已經發(fā)明了證書。一個證書有以下的內容:
* 證書的發(fā)行者姓名
* 發(fā)行證書的組織
* 標題的公鑰
* 郵戳
證書使用發(fā)行者的私鑰加密。每一個人都知道證書發(fā)行者的公鑰(這樣,每個證書的發(fā)行者擁有一個證書)。證書是一個把公鑰與姓名綁定的協(xié)議。通過使用證書技術,每一個人都可以檢查乙的證書,判斷是否被假冒。假設乙控制好他的私鑰,并且他確實是得到證書的乙,就萬事大吉了。
這些是修訂后的協(xié)議:
甲——〉乙:你好
,乙——〉甲:嗨,我是乙,乙的校驗
甲——〉乙:prove it
乙——〉甲:甲,我是乙 {信息段[甲, 我是乙] } 乙的私鑰
現(xiàn)在當甲收到乙的第一個消息,他能檢查證書,簽名(如上所述,使用信息段和公鑰解密),然后檢查標題(乙的姓名),確定是乙。他就能相信公鑰就是乙的公鑰和要求乙證明自己的身份。乙通過上面的過程,制作一個信息段,用一個簽名版本答復甲。甲可以校驗乙的信息段通過使用從證書上得到的公鑰并檢查結果。
如果一個黑客,叫H
甲——〉H :你好
H ——〉不能建立一個令甲相信的從乙的消息。
交換密碼(secret )
一旦甲已經驗證乙后,他可以發(fā)送給乙一個只有乙可以解密、閱讀的消息:
甲——〉乙:{secret}乙的公鑰
唯一找到密碼的方法只有使用乙的私鑰解碼上述的信息。交換密碼是另一個有效使用密碼加密的方法。即使在甲和乙之間的通訊被偵聽,只有乙才能得到密碼。
使用密碼作為另一個secret-key 增強了網絡的安全性,但是這次這是一個對稱的加密算法(例如DES 、RC4、IDE 甲)。因為甲在發(fā)送給乙之前產生了密碼,所以甲知道密碼。乙知道密碼因為乙有私
,鑰,能夠解密甲的信息。但他們都知道密碼,他們都能夠初始化一個對稱密碼算法,而且開始發(fā)送加密后的信息。這兒是修定后的協(xié)議:
甲——〉乙:你好
乙——〉甲:嗨,我是乙,乙的校驗
甲——〉乙:prove it
乙——〉甲:甲,我是乙 {信息段[甲,我是乙] }乙的私鑰
甲——〉乙:ok 乙,here is a secret {secret}乙的公鑰
乙——〉甲:{some message}secret-key
黑客竊聽
那么如果有一個惡意的黑客H 在甲和乙中間,雖然不能發(fā)現(xiàn)甲和乙已經交換的密碼,但能干擾他們的交談。他可以放過大部分信息,選擇破壞一定的信息(這是非常簡單的,因為他知道甲和乙通話采用的協(xié)議)。
甲——〉H :你好
H ——〉乙:你好
乙——〉H :嗨,我是乙,乙的校驗
H ——〉甲:嗨,我是乙,乙的校驗
,甲——〉H :prove it
H ——〉乙:prove it
乙——〉H :甲,我是乙 {信息段[甲,我是乙] }乙的私鑰
H ——〉甲:甲,我是乙 {信息段[甲,我是乙] }乙的私鑰
甲——〉H :ok 乙,here is a secret {secret} 乙的公鑰
H ——〉乙:ok 乙,here is a secret {secret} 乙的公鑰
乙——〉H :{some message}secret-key
H ——〉甲:Garble[{some message}secret-key ]
H 忽略一些數據不修改,直到甲和乙交換密碼。然后H 干擾乙給甲的信息。在這一點上,甲相信乙,所以他可能相信已經被干擾的消息并且盡力解密。
需要注意的是,H 不知道密碼,他所能做的就是毀壞使用秘鑰加密后的數據?;趨f(xié)議,H 可能不能產生一個有效的消息。但下一次呢?
為了阻止這種破壞,甲和乙在他們的協(xié)議中產生一個校驗碼消息(message authentication code)。一個校驗碼消息(MAC )是一部分由密碼和一些傳輸消息產生的數據。信息段算法描述的上述特性正是它們抵御H 的功能:
MAC= Digest[some message,secret ]
因為H 不知道密碼,他不能得出正確的值。即使H 隨機干擾消息,只要數據量大,他成功的機會
,微乎其微。例如,使用HD5(一個RSA 發(fā)明的好的加密算法),甲和乙能夠發(fā)送128位MAC 值和他們的消息。H 猜測正確的MAC 的幾率將近1/18,446,744,073,709,551,616約等于零。
這是又一次修改后的協(xié)議:
甲——〉乙:你好
乙——〉甲:嗨,我是乙,乙的校驗
甲——〉乙:prove it
乙——〉甲:嗨,我是乙,乙的校驗
甲,我是乙
{信息段[甲,我是乙] } 乙的私鑰
ok 乙,here is a secret {secret} 乙的公鑰
{some message,MAC}secret-key
現(xiàn)在H 已經無技可施了。他干擾了得到的所有消息,但MAC 計算機能夠發(fā)現(xiàn)他。甲和乙能夠發(fā)現(xiàn)偽造的MAC 值并且停止交談。H 不再能與乙通訊。