這幾天忙于研究給Apache配置SSL協(xié)議以提供對Https的支持,網(wǎng)上給出了很多配置方法,但大都屬于針對Apache1.3.37版本的。嘗試了N次都以失敗告終,參照TortoiseSVN的幫助文檔也未能成功。在網(wǎng)上所有的方法中這幾篇的方法最管用:
1、
【懶人教學(xué)】建構您的 Apache + SSL on Win32 2、
The Apache + SSL on Win32 HOWTO 3、
Windows 下安裝設定 Apache2 + PHP5 + mod_ssl 在按照上邊給出的方法嘗試了多次以后,也未能成功。最后直接用從網(wǎng)站
http://hunter.campbus.com/里邊提供的壓縮包Apache_2.0.59-Openssl_0.9.8b-Win32.zip解壓縮以后,在按照前邊幾篇文章中給的方法生成相關(guān)文件并修改配置以后發(fā)現就成功配置了。今天在寫(xiě)Blog時(shí)回頭再看了一眼文檔發(fā)現,以前是因為沒(méi)有拷貝Apache.exe至Apache安裝目錄導致不能成功的?,F將能正確配置成功的步驟總結如下:
步驟一 下載并安裝相應軟件包:
Apache:2.0.59版本,下載地址為:http://httpd.apache.org/,也可下載新版本的;
Apache With SSL和OpenSSL庫:下載地址為http://hunter.campbus.com/,下載與Apache版本對應的壓縮包,相對Apache2.0.59來(lái)說(shuō)需要下載Apache_2.0.59-Openssl_0.9.8b-Win32.zip文件。另外,還需要下載Openssl-×.×.×-Win32.zip,我下載的是Openssl-0.9.8b-Win32.zip。
openssl.cnf:下載地址為:http://tud.at/programm/openssl.cnf
Apache的安裝參照提示進(jìn)行即可,另外兩個(gè)包也不需要單獨安裝。
步驟二 給Apache配置SSL支持:
解壓Apache_2.0.59-Openssl_0.9.8b-Win32.zip,拷貝bin目錄下的Apache.exe、ssleay32.dll 及l(fā)ibeay32.dll 到Apache安裝目錄下的bin目錄,一定要替換掉原有的Apache.exe,(注:也可以拷貝openssl.exe,這樣不需要解壓Openssl-0.9.8b-Win32.zip就可以生成簽名證書(shū))??截恈onf目錄下的ssl.conf和ssl.default.conf至Apache安裝目錄下的conf目錄,拷貝modules 目錄下的mod_ssl.so 也要放到 apache 目錄下的 modules 目錄。
修改ssl.conf文件如下:(參照TortoiseSVN的幫助文檔)
注釋掉下邊幾行:
DocumentRoot "c:/apache/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog logs/error_log
TransferLog logs/access_log()也可以根據需要修改
修改SSLCertificateFile conf/ssl.crt/server.crt為SSLCertificateFile conf/ssl/my-server.crt
修改SSLCertificateKeyFile conf/ssl.key/server.key為SSLCertificateKeyFile conf/ssl/my-server.key
修改SSLMutex file:logs/ssl_mutex為SSLMutex default
修改SSLCertificateChainFile conf/ssl.crt/ca.crt為SSLCertificateChainFile conf/ssl/ca.crt(MS不要也行)
注:my-server.key為服務(wù)器key,my-server.crt為服務(wù)器證書(shū),可根據需要修改
注釋掉<IfDefine SSL>和</IfDefine>開(kāi)啟SSL功能
修改httpd.conf文件如下:去掉#LoadModule ssl_module modules/mod_ssl.so前邊的注釋。
在A(yíng)pache安裝目錄下的conf文件夾下建立存放證書(shū)文件的ssl文件夾。
注意:如果你的域名無(wú)法使用的話(huà),可能需要把httpd.conf中的ServerName改為:127.0.0.1:端口。我使用默認端口,故改為:127.0.0.1:80。
步驟三 生成證書(shū)文件(詳請參看OpenSSL使用指南)
解壓Openssl-0.9.8b-Win32.zip,假設至目錄E:\OpenSSL。
拷貝openssl.cnf至目錄E:\OpenSSL,并修改CA_Default部分如下:
dir = ssl
certs = $dir\\certs
crl_dir = $dir\\crl
database = $dir\\index.txt
new_certs_dir = $dir
certificate = $dir\\cacert.pem
serial = $dir\\serial
crl = $dir\\crl.pem
private_key = $dir\\privkey.pem
RANDFILE = $dir\\privkey.rnd (MS單反斜杠也可以)
在E:\OpenSSL目錄下新建文件夾ssl,在其中分別建立index.txt文件(內容任意)和serial文件(內容為整數比如01)在命令行下切換至E:\OpenSSL依次運行下邊的命令:
openssl genrsa -des3 -out ssl/ca.key 1024 產(chǎn)生 CA private key
openssl req -config openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr 產(chǎn)生CA require cert,照說(shuō)明填入相關(guān)資料
openssl x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt 產(chǎn)生CA public cert
openSSL genrsa -out ssl/server.key 1024 產(chǎn)生Server private key
openssl req -config openssl.cnf -new -key ssl/server.key -out ssl/server.csr 產(chǎn)生Server require cert,資料據說(shuō)最好要和上邊相同
openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt 產(chǎn)生Server public key
以上命令都成功執行的話(huà)會(huì )在剛才的ssl文件夾下生成ca.crt、server.crt 及server.key三個(gè)文件,把它們復制到Apache安裝目錄下conf目錄下前邊建立的ssl文件夾中。也可以按照TortoiseSVN的幫助文檔中的方法生成證書(shū)文件。
注意:在上邊兩步填寫(xiě)資料時(shí),Common Name (eg, your websites domain name) []要填的和httpd.conf中的一樣,否則會(huì )出錯,在A(yíng)pache的錯誤日志中發(fā)現錯誤為“ 證書(shū)和服務(wù)器名稱(chēng)不匹配”(SA server certificate CommonName (CN) `127.0.0.1' does NOT match server name!?)。如果ServerName設為127.0.0.1:80的話(huà),Common Name (eg, your websites domain name) []好像填localhost和127.0.0.1都可以。
ServerName為域名的情況沒(méi)有嘗試,其實(shí)我覺(jué)得ServerName和這兩處資料的填寫(xiě),用自己的IP可能是最好的選擇。
在完成上邊的操作以后啟動(dòng)Apache服務(wù)器,不出錯的話(huà)就能使用https://localhost/來(lái)訪(fǎng)問(wèn)服務(wù)器了。
當熟悉Apache下配置SSL以后,相信你就可以自己修改相關(guān)參數并進(jìn)行更深入的研究了。 Apache服務(wù)器不能成功啟動(dòng)時(shí),可以通過(guò)查看Apache的Log尋求解決辦法!
參考資料:
[1] 【懶人教學(xué)】建構您的 Apache + SSL on Win32
[2] The Apache + SSL on Win32 HOWTO
[3] Windows 下安裝設定 Apache2 + PHP5 + mod_ssl
[4] TortoiseSVN的幫助文檔