Apache伺服器與用戶端的通信是明文方式,很多通過HTTP協定傳送資料的應用将受到黑客的威脅,資訊的安全性難以得到保障。是以,本文就将對SSL協定進行深入剖析,并介紹如何使用SSL技術保護Apache伺服器通信。
(續:使用SSL協定保證web服務通信安全(一、基礎理論篇))
6.Apache中SSL原理
在SSL通信中,首先采用非對稱加密交換資訊,使得伺服器獲得浏覽器端提供的對稱加密的密鑰,然後利用該密鑰進行通信過程中資訊的加密和解密。為了保證消息在傳遞過程中沒有被篡改,可以加密Hash編碼來確定資訊的完整性。
伺服器數字證書主要頒發給Web站點或其他需要安全鑒别的伺服器,證明伺服器的身份資訊,同樣用戶端數字證書用于證明用戶端的身份。
使用公用密鑰的方式可以保證資料傳輸沒有問題,但如果浏覽器客戶通路的站點被假冒,這也是一個嚴重的安全問題。這個問題不屬于加密本身,而是要保證密鑰本身的正确性問題。要保證所獲得的其他站點公用密鑰為其正确的密鑰,而非假冒站點的密鑰,就必須通過一個認證機制,能對站點的密鑰進行認證。當然即使沒有經過認證,仍然可以保證資訊傳輸安全,隻是客戶不能确信通路的伺服器沒有被假冒。如果不是為了提供電子商務等方面對安全性要求很高的服務,一般不需要如此嚴格的考慮。
下面給出使用SSL進行通信的過程(參見圖2):
(1)用戶端向伺服器端發起對話,協商傳送加密算法。例如:對稱加密算法有DES、RC5,密鑰交換算法有RSA和DH,摘要算法有MD5和SHA。
(2)伺服器向用戶端發送伺服器數字證書。比如:使用DES-RSA-MD5這對組合進行通信。用戶端可以驗證伺服器的身份,決定是否需要建立通信。
(3)用戶端向伺服器傳送本次對話的密鑰。在檢查伺服器的數字證書是否正确,通過CA機構頒發的證書驗證了伺服器證書的真實有效性之後,用戶端生成利用伺服器的公鑰加密的本次對話的密鑰發送給伺服器。
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軟體網站首頁
下載下傳源代碼安裝包後,使用如下的步驟安裝即可:
(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參數先停止伺服器運作。
然後,就可以啟動Mozilla、IE或其他支援SSL的浏覽器,輸入URL為:https://ssl_server/來檢視伺服器是否有相應,https使用的預設端口為443,如果一切正常,伺服器将會傳回給用戶端證書,由用戶端進行驗證并且判斷,是否接受該證書并進行下一步的通信過程。
下面以Linux下的Mozilla Firefox浏覽器為例,來簡要說明使用Apache+SSL伺服器的過程。首先,圖4給出了檢視和驗證該證書的相關提示;最後,圖5則給出了證書驗證成功後,采用SSL進行保密傳輸的具體界面示意:
圖4 驗證證書示意
圖5 證書通過驗證,正常通信開始
本文轉自samsunglinuxl51CTO部落格,原文連結:http://blog.51cto.com/patterson/435616 ,如需轉載請自行聯系原作者