要讓 Apache可以支援SSL有兩個做法,分別是是安裝Apache-SSL及安裝mod_ssl模組,其中Apache-SSL專案使用的是舊版的 apache,目前只有進行到1.3.27這個版本,2.0以上的Apache目前(2004/7/1)還無法使用,檔案可以到www.apache-ssl.org及www.apache.org 下載。而mod_ssl則必須到http://www.modssl.org下載mod_ssl模組,並重新編譯apache讓他可以支援mod_ssl 模組。目前我在使用apache-ssl並讓他和tomcat整合時,發現無法載入模組,也許是我編譯apache時沒有加上參數,這個會再有空時在測 試。
安裝:
不管是哪一種解決方案,SSL加解密的部分都需要openssl軟體來協助,www.openssl.org,在RedHat的套件裡,預設應該都是有安裝的。在安裝前建議先執行以下指令
ln -s /usr/kerberos/include/com_err.h /usr/include/
ln -s /usr/kerberos/include/profile.h /usr/include/
ln -s /usr/kerberos/include/krb5.h /usr/include/
不然當我們編譯ssl的時候有可能會出現問題
一、 Apache-SSL解決方案:
- 先 到http://www.apache-ssl.org下載最新的apache-ssl軟體,下載後由最新版本的序號為準,再到 www.apache.org找相對應的版本,例如在www.apache-ssl.org找到apache_1.3.27+ ssl_1.48.tar.gz,表示這個版本支援的是apache 1.3.27,所以必須要到http://www.apache.org再下載apache_1.3.27-x86_64-whatever- linux22.tar.gz像這樣的檔案
- 到/usr/local/src(暫存原始檔用)資料夾,將apache_1.3.27- x86.tar.gz解壓縮(tar zxvf apache_1.3.27-x86_64-whatever-linux22.tar.gz ),解完之後進入apache的目錄裡,再將apache_1.3.27+ssl_1.48.tar.gz的檔案解到到相同的目錄裡。
- 執行”./FixPatch openssl的所在目錄”,這個程式會將apache更新成可以支援SSL的版本,如果一切正常的話,會顯示Patch完成。
一 般常遇到的應該是找不到openssl安裝目錄的錯誤訊息為多,根據我測試的結果當我指定我的openssl位址(我安裝在 /usr/bin/openssl)不管我指定的是./FixPatch /usr/bin/openssl或./FixPatch /usr/bin/都會說找不到該檔案,但是如果用./FixPatch /usr/就可以正常完成,這點相當詭異。 - 接下來執行./configure 來產生安裝所需要的檔案,我使用的是最陽春的./configure --prefix="/wwwssl/",這邊的—prefix為指定安裝目錄,所以事實上我沒有將其他的模組一起編譯進去。
- 產生正確的Makefile之後,就可以開始編譯Apache-SSL,指令為
make ; make install - 安 裝完成之後,apache就會被安裝在/wwwssl的目錄底下,接下來產生SSL的鑰匙對及證書請參考第三節,產生後的xxx.key及xxx.crt 請放在同一個目錄裡方便控管,並將屬性改成chmod 400,在這個例子中,我放在/wwwssl/conf/目錄底下。
- 修改 /wwwssl/conf/httpsd.conf檔案,有一段設定為#Listen 3000,如果這台機器還要提供一般的http服務的話,請將#拿掉,並將3000改成80,然後再最後一行加上Include ssl.conf,再加上這一段文字:(請依照需求填寫)
Listen w.x.y.z:443
DocumentRoot /wwwssl/htdocs
SSLCertificateFile /wwwssl/conf/xxx.crt
SSLCertificateKeyFile /wwwssl/conf/xxx.key
SSLVerifyClient 0
SSLVerifyDepth 10
SSLBanCipher NULL-MD5:NULL-SHA
SSLEnable - 存檔離開後,請在/wwwssl/conf/底下建立一個ssl.conf檔案,這個檔案主要在指定cache的位址:
SSLDisable
SSLNoCAList
SSLRandomFile file /var/tmp 1024
SSLCacheServerPath /wwwssl/bin/gcache
SSLCacheServerPort logs/gcache_port
SSLCacheServerRunDir /tmp
SSLSessionCacheTimeout 15 - 最後再幫httpsd.conf建立一個軟鏈結到httpd.conf:
ln -s httpsd.conf httpd.conf - 啟動apache,/wwwssl/bin/httpsdctl start。
- 打開瀏覽器觀看成果吧
http://w.x.y.z/index.html.zh
https://w.x.y.z/index.html.zh
- 安裝Mod_SSL,方法省略(可直接下載RPM檔來安裝)
- 將最新版Apache解壓縮,並進入該目錄,測試的版本是httpd-2.0.49.tar.gz
- 產生Apache設定檔,必須將mod_ssl支援編譯進去
./configure --prefix="/www" --enable-mods-shared=most --enable-so --enable-ssl=static --with-ssl=/usr/include/openssl/
make; make install進行安裝 - 安裝完成之後在/www/conf/會產生一個ssl.conf檔,尋找
SSLCertificateFile /www/conf/adbanner.crt 和
SSLCertificateKeyFile /www/conf/adbanner.key 將正確的key和證書位址帶入 - 啟動apache /www/bin/apache startssl
- 打開瀏覽器觀看成果吧
http://w.x.y.z/index.html.zh
https://w.x.y.z/index.html.zh
- openssl req -new > xxx.csr,接下來會問一些問題,請按照自己的環境回答,其中Common Name:這項請回答你的網址,以後才不會出現困擾。也請您牢記您的密碼。
- openssl rsa -in privkey.pem -out xxx.key 利用第一個步驟產生的檔案來建立一把私鑰。(這裡使用RSA編碼),這個步驟必須輸入第一個步驟設定的密碼。
- openssl x509 -in xxx.csr -out xxx.crt -req -signkey xxx.key -days 365 建立一個自行簽署期限365天的CA證書(不經過第三方認證)
- 如果要申請第三方認證的憑證,只需要將xxx.csr傳給該公司,他們就會回覆相關的xxx.crt檔
- 關於第一個和第二個指令,也有人是這樣做的
openssl genrsa 1024 > /etc/httpd/conf/ssl.key/server.key(先建立私鑰)
openssl req -new -key /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.csr/server.csr(再利用私鑰建立要求文件)
以Apache -SSL和mod_ssl兩種解決方案來說,apache-ssl的檔案較小,編譯起來比較快,且在啟動apache的時候不需要另外輸入憑證的密碼,而 mod_ssl的設定就比較簡單明瞭,但檔案大,編譯起來會花費不少時間,且mod_ssl這個方案可以正常的支援tomcat整合,所以推薦使用 mod_ssl方案。