用SSL技術保護Apache服務器通信
Apache是世界排名第一的Web服務器,世界上60%以上的Web服務器是使用的Apache。Apache是一個免費的軟件,用戶可以免費從Apache的官方網站下載。任何人都可以參加其組成部分的開發。Apache允許世界各地的人對其提供新特性。當新代碼提交到Apache Group后,Apache Group對其具體內容進行審查并進行測試和質量檢查。如果他們滿意,該代碼就會被集成到Apache的主要發行版本中。
但是,Apache服務器與客戶端的通信是明文方式,很多通過HTTP協議傳送數據的應用將受到黑客的威脅,信息的安全性難以得到保障。因此,本文就將對在Linux中,使用SSL技術保護Apache服務器通信做詳細介紹。
Apache的安裝和啟動
Apache的RPM軟件包既可以在Red Hat Linux 9安裝光盤中找到,也可以在Red Hat的FTP服務器上找到。同任何其他RPM軟件包安裝一樣,Apache的RPM軟件包的安裝也可以使用命令行形式的RPM工具安裝。用戶可以到www.redhat.com下載Apache的免費RPM軟件包,其文件名為ant-apache-bsf-1.6.1-1jpp_3rh.noarch.rpm,執行如下命令即可完成Apache的安裝:
#rpm -Uvh ant-apache-bsf-1.6.1-1jpp_3rh.noarch.rpm
ApacheRPM將把文件安裝在如下的目錄中:
●/etc/httpd/conf:這一目錄包含Apache的所有配置文件,包括access.conf、httpd.conf和srm.conf。
●/etc/rc.d/:位于這一目錄下的目錄樹包含系統的啟動腳本。ApacheRPM在這里安裝了Web服務器的整套腳本,這些腳本可用來從命令行啟動和停止服務器,并且也可在工作站關閉、啟動或重新引導時自動啟動或停止服務器。
●/home/httpd: RPM在這一目錄安裝默認的服務器圖標、CGI腳本和HTML文件。如果想在其他地方保存Web內容,通過在服務器的配置文件適當的地方進行更改可以實現。
●/usr/doc和/usr/man: RPM包含手冊頁和readme文件,它們被放在這些目錄中。像大多數RPM軟件包一樣,readme文件以及其他相關的文檔放在/usr/doc下的一個以服務器軟件包的版本命名的目錄中。
●/usr/sbin:可執行程序放在這一目錄中。包括服務器程序本身,還有各種工具,如用于創建驗證口令文件的htpasswd程序。
●/var/log/http: 服務器日志文件存放于該目錄。在默認情況下,有兩個日志文件:access_log和error_log,但是可以定義任意多個包含各種信息的自定義日志文件。
Apache服務器的手動啟動很簡單,假設Apache服務器安裝在/usr/sbin/目錄下,在Linux終端啟動Apache的命令為:
#.cd /usr/sbin
#./httpd start
重新啟動Apache的命令為:
#.cd /usr/sbin
#./httpd restart
停止Apache的命令為:
#.cd /usr/sbin
#./httpd stop
SSL的原理
通常的連接方式中,通信是以非加密的形式在網絡上傳播的,這就有可能被非法竊聽到,尤其是用于認證的口令信息。為了避免這個安全漏洞,就必須對傳輸過程進行加密。對HTTP傳輸進行加密的協議為HTTPS,它是通過SSL進行HTTP傳輸的協議,不但通過公用密鑰的算法進行加密保證傳輸的安全性,而且還可以通過獲得認證證書CA,保證客戶連接的服務器沒有被假冒。
SSL是一種國際標準的加密及身份認證通信協議,用戶采用的瀏覽器就支持此協議。SSL(Secure Sockets Layer)最初是由美國Netscape公司研究出來的,后來成為了Internet網上安全通信與交易的標準。SSL協議使用通信雙方的客戶證書以及CA根證書,允許客戶/服務器應用以一種不能被偷聽的方式通信,在通信雙方間建立起了一條安全的、可信任的通信通道。它具備以下基礎特征:信息保密性、信息完整性、相互鑒定。
在SSL通信中,首先采用非對稱加密交換信息,使得服務器獲得瀏覽器端提供的對稱加密的密鑰,然后利用該密鑰進行通信過程中信息的加密和解密。為了保證消息在傳遞過程中沒有被篡改,可以加密Hash編碼來確保信息的完整性。
服務器數字證書主要頒發給Web站點或其他需要安全鑒別的服務器,證明服務器的身份信息,同樣客戶端數字證書用于證明客戶端的身份。
使用公用密鑰的方式可以保證數據傳輸沒有問題,但如果瀏覽器客戶訪問的站點被假冒,這也是一個嚴重的安全問題。這個問題不屬于加密本身,而是要保證密鑰本身的正確性問題。要保證所獲得的其他站點公用密鑰為其正確的密鑰,而非假冒站點的密鑰,就必須通過一個認證機制,能對站點的密鑰進行認證。當然即使沒有經過認證,仍然可以保證信息傳輸安全,只是客戶不能確信訪問的服務器沒有被假冒。如果不是為了提供電子商務等方面對安全性要求很高的服務,一般不需要如此嚴格的考慮。
下面給出使用SSL進行通信的過程:
● 客戶端向服務器端發起對話,協商傳送加密算法。例如:對稱加密算法有DES、RC5,密鑰交換算法有RSA和DH,摘要算法有MD5和SHA。
● 服務器向客戶端發送服務器數字證書。比如:使用DES-RSA-MD5這對組合進行通信?蛻舳丝梢则炞C服務器的身份,決定是否需要建立通信。
● 客戶端向服務器傳送本次對話的密鑰。在檢查服務器的數字證書是否正確,通過CA機構頒發的證書驗證了服務器證書的真實有效性之后,客戶端生成利用服務器的公鑰加密的本次對話的密鑰發送給服務器。
● 服務器用自己的私鑰解密獲取本次通信的密鑰。
● 雙方的通信正式開始。
在一般情況下,當客戶端是保密信息的傳遞者時,不需要數字證書驗證自己身份的真實性,如我們通常使用的網上銀行交易活動,客戶需要將自己的隱秘信息如賬號和密碼發送給銀行,因此銀行的服務器需要安裝數字證書來表明自己身份的有效性,否則將會使得信息泄露。當然,在某些安全性要求極高地B2B應用,服務器端也需要對客戶端的身份進行驗證,這時客戶端也需要安裝數字證書以保證通信時服務器可以辨別出客戶端的身份,驗證過程類似于服務器身份的驗證過程。而在通常情況下,瀏覽器都會通過交互的方式來完成上述的通信過程。
在Linux中使用Apache+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實現,首先需要安裝這個Port。
openssl-0.9.7a-2.i386.rpm下載地址為:ftp://rpmfind.net/linux/redhat/9/en/os/i386/RedHat/RPMS/openssl-0.9.7a-2.i386.rpm,也可以在Red Hat Linux 9或者Fedora Core 4等Linux發行版本的光盤中找到該RPM包。并且,在默認條件下,執行系統安裝將會安裝該軟件包。
安裝命令如下:
#rpm - ivh openssl- 0.9.7a-2.i386.rpm
安裝好openssl之后,就可以安裝Apache+mod_ssl了。然而為了安裝完全正確,需要清除原先安裝的Apache服務器的其他版本,并且還要清除所有的設置文件及其缺省設置文件,以避免出現安裝問題。最好也刪除 /usr/local/www目錄(或更名),以便安裝程序能建立正確的初始文檔目錄。如果是一臺沒有安裝過Apache服務器的新系統,就可以忽略這個步驟,而直接安裝Apache+mod_ssl了。
啟動和關閉該服務器的命令如下所示:
●#apachectl start:啟動apache
●#apachectl startssl:啟動apache ssl。注意,此處若使用start參數,則僅僅啟動普通Apache的httpd守護進程,而不啟動其SSL能力,只有startssl才能啟動Apache的SSL能力。如果之前Apache的守護進程正在運行,便需要使用stop參數先停止服務器運行。
●#apachectl stop:停止apache。
●#apachectl restart:重新啟動apache。
●#apachectl status:顯示apache的狀態。
●#apachectl configtest:測試httpd.conf配置是否正確。
啟動apache ssl后,就可以啟動Mozilla、IE或其他支持SSL的瀏覽器,輸入URL為:http://ssl_server/來查看服務器是否有響應,https使用的缺省端口為443,如果一切正常,服務器將會返回給客戶端證書,由客戶端進行驗證并且判斷,是否接受該證書并進行下一步的通信過程。
關鍵字:SSL 保護 Apache 服務器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解