使用SSL協議保證web服務通信安全
原創【51CTO.com 獨家特稿】Apache服務器與客戶端的通信是明文方式,很多通過HTTP協議傳送數據的應用將受到黑客的威脅,信息的安全性難以得到保障。因此,本文就將對SSL協議進行深入剖析,并介紹如何使用SSL技術保護Apache服務器通信。
1 SSL簡介
通常的連接方式中,通信是以非加密的形式在網絡上傳播的,這就有可能被非法竊聽到,尤其是用于認證的口令信息。為了避免這個安全漏洞,就必須對傳輸過程進行加密。對HTTP傳輸進行加密的協議為HTTPS,它是通過SSL進行HTTP傳輸的協議,不但通過公用密鑰的算法進行加密保證傳輸的安全性,而且還可以通過獲得認證證書CA,保證客戶連接的服務器沒有被假冒。
SSL是一種國際標準的加密及身份認證通信協議,用戶采用的瀏覽器就支持此協議。SSL(Secure Sockets Layer)最初是由美國Netscape公司研究出來的,后來成為了Internet網上安全通信與交易的標準(參見圖1)。SSL協議使用通信雙方的客戶證書以及CA根證書,允許客戶/服務器應用以一種不能被偷聽的方式通信,在通信雙方間建立起了一條安全的、可信任的通信通道。它具備以下基本特征:信息保密性、信息完整性、相互鑒定。
該協議主要使用Hash編碼、加密技術,下面對這些技術進行簡要介紹:
圖1 SSL工作層次示意圖
(1)Hash編碼是使用Hash(散列)算法從任意長度的消息中計算Hash值的一個過程,Hash值可以說是消息的指紋,或者說是摘要。因為對于任何不同的消息,幾乎總有不同的Hash值,如果有沖突的話,可以采用開鏈法等方法來進行避免。因此在SSL通信過程中,可以對消息的Hash值進行加密,確保傳遞的消息在傳輸過程中沒有被修改。
(2)非對稱加密或稱之為公鑰加密使用數學上相關的兩個數值來對信息進行編碼(加密),其中一個數字稱為公鑰,另一個稱為私鑰。公鑰加密的信息可以用私鑰解密,私鑰加密的信息可以用公鑰解密。由于公鑰可以大面積發放,因此公鑰加密在SSL加密通信中應用于對密鑰的加密或者進行數字簽名。
對稱加密和非對稱加密相比的區別在于對稱加密中,加密信息和解密信息使用同樣的密鑰,因此該密鑰無法公開,并且一旦知道其密碼,則該加密完全失效。但是其具有加密、解密快速、方便的特點。
2 Apache中運用SSL的基本原理
1.公鑰體制
加密和解密使用同一個密鑰的算法,稱為對稱加密算法;加密和解密使用的是不同的密鑰,稱為非對稱加密算法,公鑰系統即屬于非對稱加密算法。對于對稱加密而言,需要著重保護的是對稱密鑰,對于公鑰算法而言,需要著重保護的是私鑰。
公鑰加密算法,以及衍生出的數字簽名、數字證書技術,不僅廣泛應用于Internet通信中,例如HTTPS協議中的SSL/TLS,在單機系統中也越來越受到重視,例如Windows XP的設備驅動程序、.NET的GAC assembly都要求數字簽名。微軟從Windows98/NT4起即提供了Cryptograph API,支持DES、RC2、RC4,IDEA等對稱加密算法和RSA公鑰系統等非對稱密算法,以及MD5,SHA,MAC等摘要(Digest,也稱為Hash,散列)算法。#p#
RSA公鑰加密在計算機產業中被廣泛使用在認證和加密。可以從RSA Data Security Inc.獲得的RSA公鑰加密許可證。公鑰加密是使用一對非對稱的密碼加密或解密的方法。每一對密碼由公鑰和私鑰組成。公鑰被廣泛發布。私鑰是隱密的,不公開。用公鑰加密的數據只能夠被私鑰解密。反過來,使用私鑰加密的數據只能用公鑰解密。這個非對稱的特性使得公鑰加密很有用。
2.數字證書簡介
數字證書就是互聯網通訊中標志通訊各方身份信息的一系列數據,提供了一種在Internet上驗證您身份的方式,其作用類似于司機的駕駛執照或日常生活中的身份證。它是由一個由權威機構-----CA機構,又稱為證書授權(Certificate Authorit y)中心發行的,人們可以在網上用它來識別對方的身份。數字證書是一個經證書授權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。最簡單的證書包含一個公開密鑰、名稱以及證書授權中心的數字簽名。一般情況下證書中還包括密鑰的有效時間,發證機關(證書授權中心)的名稱,該證書的序列號等信息,證書的格式遵循ITUT X.509國際標準。數字證書可以應用于互聯網上的電子商務活動和電子政務活動,其應用范圍涉及需要身份認證及數據安全的各個行業,包括傳統的商業、制造業、流通業的網上交易,以及公共事業、金融服務業、工商稅務、海關、政府行政辦公、教育科研單位、保險、醫療等網上作業系統。
一個標準的X.509數字證書包含以下一些內容:
證書的版本信息;
證書的序列號,每個證書都有一個唯一的證書序列號;
證書所使用的簽名算法;
證書的發行機構名稱,命名規則一般采用X.500格式;
證書的有效期,現在通用的證書一般采用UTC時間格式,它的計時范圍為1950-2049;
證書所有人的名稱,命名規則一般采用X.500格式;
證書所有人的公開密鑰;
證書發行者對證書的簽名。
3.數字證書基本功能
基于Internet網的電子商務系統技術使在網上購物的顧客能夠極其方便輕松地獲 得商家和企業的信息,但同時也增加了對某些敏感或有價值的數據被濫用的風險。買方和賣方都必須對于在因特網上進行的一切金融交易運作都是真實可靠的,并且要使顧客、商家和企業等交易各方都具有絕對的信心,因而因特網(Internet)電子商務系統必須保證具有十分可靠的安全保密技術,也就是說,必須保證網絡安全的四大要素,即信息傳輸的保密性、數據交換的完整性、發送信息的不可否認性、交易者身份的確定性。
1、信息的保密性
交易中的商務信息均有保密的要求。如信用卡的帳號和用戶名被人知悉,就可能 被盜用,訂貨和付款的信息被競爭對手獲悉,就可能喪失商機。因此在電子商務的信 息傳播中一般均有加密的要求。#p#
2、交易者身份的確定性
網上交易的雙方很可能素昧平生,相隔千里。要使交易成功首先要能確認對方的身份,對商家要考慮客戶端不能是騙子,而客戶也會擔心網上的商店不是一個玩弄欺詐的黑店。因此能方便而可靠地確認對方身份是交易的前提。對于為顧客或用戶開展服務的銀行、信用卡公司和銷售商店,為了做到安全、保密、可靠地開展服務活動,都要進行身份認證的工作。對有關的銷售商店來說,他們對顧客所用的信用卡的號碼是不知道的,商店只能把信用卡的確認工作完全交給銀行來完成。銀行和信用卡公司可以采用各種保密與識別方法,確認顧客的身份是否合法,同時還要防止發生拒付款 問題以及確認訂貨和訂貨收據信息等。
3、不可否認性
由于商情的千變萬化,交易一旦達成是不能被否認的。否則必然會損害一方的利益。例如訂購黃金,訂貨時金價較低,但收到訂單后,金價上漲了,如收單方能否認受到訂單的實際時間,甚至否認收到訂單的事實,則訂貨方就會蒙受損失。因此電子 交易通信過程的各個環節都必須是不可否認的。
4、不可修改性
交易的文件是不可被修改的,如上例所舉的訂購黃金。供貨單位在收到訂單后,發現金價大幅上漲了,如其能改動文件內容,將訂購數1噸改為1克,則可大幅受益,那么訂貨單位可能就會因此而蒙受損失。因此電子交易文件也要能做到不可修改,以保障交易的嚴肅和公正。
4.數字證書原理
人們在感嘆電子商務的巨大潛力的同時,不得不冷靜地思考,在人與人互不見面的計算機互聯網上進行交易和作業時,怎么才能保證交易的公正性和安全性,保證交易雙方身份的真實性。國際上已經有比較成熟的安全解決方案,那就是建立安全證書體系結構。數字安全證書提供了一種在網上驗證身份的方式。安全證書體制主要采用了公開密鑰體制,其它還包括對稱密鑰加密、數字簽名、數字信封等技術。
我們可以使用數字證書,通過運用對稱和非對稱密碼體制等密碼技術建立起一套嚴密的身份認證系統,從而保證:信息除發送方和接收方外不被其它人竊取;信息在傳輸過程中不被篡改;發送方能夠通過數字證書來確認接收方的身份;發送方對于自己的信息不能抵賴。
數字證書采用公鑰體制,即利用一對互相匹配的密鑰進行加密、解密。每個用戶自己設定一把特定的僅為本人所知的私有密鑰(私鑰),用它進行解密和簽名;同時設定一把公共密鑰(公鑰)并由本人公開,為一組用戶所共享,用于加密和驗證簽名。當發送一份保密文件時,發送方使用接收方的公鑰對數據加密,而接收方則使用 自己的私鑰解密,這樣信息就可以安全無誤地到達目的地了。通過數字的手段保證加密過程是一個不可逆過程,即只有用私有密鑰才能解密。在公開密鑰密碼體制中,常用的一種是RSA體制。其數學原理是將一個大數分解成兩個質數的乘積,加密和解密用的是兩個不同的密鑰。即使已知明文、密文和加密密鑰(公開密鑰),想要推導出解密密鑰(私密密鑰),在計算上是不可能的。按現在的計算機技術水平,要破解目前采用的1024位RSA密鑰,需要上千年的計算時間。公開密鑰技術解決了密鑰發布的管理問題,商戶可以公開其公開密鑰,而保留其私有密鑰。購物者可以用人人皆知的公開密鑰對發送的信息進行加密,安全地傳送給商戶,然后由商戶用自己的私有密鑰進行解密。
用戶也可以采用自己的私鑰對信息加以處理,由于密鑰僅為本人所有,這樣就產生了別人無法生成的文件,也就形成了數字簽名。采用數字簽名,能夠確認以下兩點:
(1)保證信息是由簽名者自己簽名發送的,簽名者不能否認或難以否認;
(2)保證信息自簽發后到收到為止未曾作過任何修改,簽發的文件是真實文件。#p#
數字簽名具體做法是:
(1)將報文按雙方約定的HASH算法計算得到一個固定位數的報文摘要。在數學上保證:只要改動報文中任何一位,重新計算出的報文摘要值就會與原先的值不相符。這樣就保證了報文的不可更改性。
(2)將該報文摘要值用發送者的私人密鑰加密,然后連同原報文一起發送給接收者,而產生的報文即稱數字簽名。
(3)接收方收到數字簽名后,用同樣的HASH算法對報文計算摘要值,然后與用發送者的公開密鑰進行解密解開的報文摘要值相比較。如相等則說明報文確實來自所稱的發送者。
5.證書授權中心
CA機構,又稱為證書授權(Certificate Authority)中心,作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。CA中心為每個使用公開密鑰的用戶發放一個數字證書,數字證書的作用是證明證書中列出的用戶合法擁有證書中列出的公開密鑰。CA機構的數字簽名使得攻擊者不能偽造和篡改證書。它負責產生、分配并管理所有參與網上交易的個體所需的數字證書,因此是安全電子交易的核心環節。
由此可見,建設證書授權(CA)中心,是山西省開拓和規范電子商務市場必不可少的一步。為保證用戶之間在網上傳遞信息的安全性、真實性、可靠性、完整性和不可抵賴性,不僅需要對用戶的身份真實性進行驗證,也需要有一個具有權威性、公正性、唯一性的機構,負責向電子商務的各個主體頒發并管理符合國內、國際安全電子 交易協議標準的電子商務安全證書。
6.Apache中SSL原理
在SSL通信中,首先采用非對稱加密交換信息,使得服務器獲得瀏覽器端提供的對稱加密的密鑰,然后利用該密鑰進行通信過程中信息的加密和解密。為了保證消息在傳遞過程中沒有被篡改,可以加密Hash編碼來確保信息的完整性。
服務器數字證書主要頒發給Web站點或其他需要安全鑒別的服務器,證明服務器的身份信息,同樣客戶端數字證書用于證明客戶端的身份。
使用公用密鑰的方式可以保證數據傳輸沒有問題,但如果瀏覽器客戶訪問的站點被假冒,這也是一個嚴重的安全問題。這個問題不屬于加密本身,而是要保證密鑰本身的正確性問題。要保證所獲得的其他站點公用密鑰為其正確的密鑰,而非假冒站點的密鑰,就必須通過一個認證機制,能對站點的密鑰進行認證。當然即使沒有經過認證,仍然可以保證信息傳輸安全,只是客戶不能確信訪問的服務器沒有被假冒。如果不是為了提供電子商務等方面對安全性要求很高的服務,一般不需要如此嚴格的考慮。
下面給出使用SSL進行通信的過程(參見圖2):
(1)客戶端向服務器端發起對話,協商傳送加密算法。例如:對稱加密算法有DES、RC5,密鑰交換算法有RSA和DH,摘要算法有MD5和SHA。
(2)服務器向客戶端發送服務器數字證書。比如:使用DES-RSA-MD5這對組合進行通信。客戶端可以驗證服務器的身份,決定是否需要建立通信。
(3)客戶端向服務器傳送本次對話的密鑰。在檢查服務器的數字證書是否正確,通過CA機構頒發的證書驗證了服務器證書的真實有效性之后,客戶端生成利用服務器的公鑰加密的本次對話的密鑰發送給服務器。#p#
(4)服務器用自己的私鑰解密獲取本次通信的密鑰。
(5)雙方的通信正式開始。
圖2 SSL通信流程示意
在一般情況下,當客戶端是保密信息的傳遞者時,他不需要數字證書驗證自己身份的真實性,如用戶通常使用的網上銀行交易活動,客戶需要將自己的隱秘信息——賬號和密碼發送給銀行,因此銀行的服務器需要安裝數字證書來表明自己身份的有效性,否則將會使得信息泄露。當然,在某些安全性要求極高的B2B(Business to Business)應用,服務器端也需要對客戶端的身份進行驗證,這時客戶端也需要安裝數字證書以保證通信時服務器可以辨別出客戶端的身份,驗證過程類似于服務器身份的驗證過程。另外,在一些電子商務的應用中,可能還會使用到電子簽名,或者為了信息交換的更加安全,會增加電子簽名和消息校驗碼(MAC)。而在通常情況下,瀏覽器都會通過交互的方式來完成上述的通信過程,下面在Linux中對Apache采用SSL也會作詳細地介紹。
3 安裝和啟動SSL
1.安裝SSL
雖然Apache服務器不支持SSL,但Apache服務器有兩個可以自由使用的支持SSL的相關計劃,一個為Apache-SSL,它集成了Apache服務器和SSL,另一個為Apache+mod_ssl,它是通過可動態加載的模塊mod_ssl來支持SSL,其中后一個是由前一個分化出的,并由于使用模塊,易用性很好,因此使用范圍更為廣泛。還有一些基于Apache并集成了SSL能力的商業Web服務器,然而使用這些商業Web服務器主要是北美,這是因為在那里SSL使用的公開密鑰的算法具備專利權,不能用于商業目的,其他的國家不必考慮這個專利問題,而可以自由使用SSL。
Apache+mod_ssl依賴于另外一個軟件:OpenSSL,它是一個可以自由使用的SSL實現,首先需要安裝這個軟件。用戶可以從網站http://www.openssl.org/source/上(如圖3所示)下載Linux下OpenSSL的最新版本:openssl-1.0.0b.tar.gz。
圖3 OpenSSL軟件網站首頁 #p#
下載源代碼安裝包后,使用如下的步驟安裝即可:
(1)用openssl-1.0.0b.tar.gz軟件包安裝OpenSSL之前,首先須要對該軟件包進行解壓縮和解包。用以下命令完成軟件包的解壓縮和解包:
#tar xvfz openssl-1.0.0b.tar.gz
(2)解壓縮后,進入源碼的目錄openssl-1.0.0b,并使用配置腳本進行環境的設置。相應的命令為:
//改變當前目錄為openssl-1.0.0b目錄
#cd openssl-1.0.0b
//執行該目錄下配置腳本程序
#./configure
(3)在執行./configure之后,配置腳本會自動生成Makefile。如果在設置的過程中沒有任何的錯誤,就可以開始編譯源碼了。相應的命令及其顯示結果如下:
#make & make install
安裝好OpenSSL之后,就可以安裝使用Apache+mod_ssl了。然而為了安裝完全正確,需要清除原先安裝的Apache服務器的其他版本,并且還要清除所有的設置文件及其缺省設置文件,以避免出現安裝問題。最好也刪除/usr/local/www目錄(或更名),以便安裝程序能建立正確的初始文檔目錄。如果是一臺沒有安裝過Apache服務器的新系統,就可以忽略這個步驟,而直接安裝Apache+mod_ssl了。
2.啟動和關閉SSL
啟動和關閉該服務器的命令如下所示:
#apachectl start:啟動apache。
#apachectl startssl:啟動apache ssl。
#apachectl stop:停止apache。
#apachectl restart:重新啟動apache。
#apachectl status:顯示apache的狀態。
#apachectl configtest:測試httpd.conf配置是否正確。
# /usr/local/sbin/apachectl startssl
此時使用start參數為僅僅啟動普通Apache的httpd守護進程,而不啟動其SSL能力,而startssl才能啟動Apache的SSL能力。如果之前Apache的守護進程正在運行,便需要使用stop參數先停止服務器運行。#p#
然后,就可以啟動Mozilla、IE或其他支持SSL的瀏覽器,輸入URL為:https://ssl_server/來查看服務器是否有相應,https使用的缺省端口為443,如果一切正常,服務器將會返回給客戶端證書,由客戶端進行驗證并且判斷,是否接受該證書并進行下一步的通信過程。
下面以Linux下的Mozilla Firefox瀏覽器為例,來簡要說明使用Apache+SSL服務器的過程。首先,圖4給出了查看和驗證該證書的相關提示;最后,圖5則給出了證書驗證成功后,采用SSL進行保密傳輸的具體界面示意:
圖4 驗證證書示意
圖5 證書通過驗證,正常通信開始
【51CTO.com獨家特稿,非經授權謝絕轉載!合作媒體轉載請注明原文出處及出處!】
【編輯推薦】