Windows下配置Apache2.X+SSL心得 2006-08-29 14:58
這幾天忙於研究給Apache配置SSL協議以提供對Https的支援,網上給出了很多配置方法,但大都屬於針對Apache1.3.37版本的。嘗試了N次都以失敗告終,參照TortoiseSVN的協助文檔也未能成功。在網上所有的方法中這幾篇的方法最管用: 1、【懶人教學】建構您的 Apache + SSL on Win32 2、The Apache + SSL on Win32 HOWTO 3、Windows 下安裝設定 Apache2 + PHP5 + mod_ssl 在按照上邊給出的方法嘗試了多次以後,也未能成功。最後直接用從網站http://hunter.campbus.com/裡邊提供的壓縮包Apache_2.0.59-Openssl_0.9.8b-Win32.zip解壓縮以後,在按照前邊幾篇文章中給的方法產生相關檔案並修改配置以後發現就成功配置了。今天在寫Blog時回頭再看了一眼文檔發現,以前是因為沒有拷貝Apache.exe至Apache安裝目錄導致不能成功的。現將能正確配置成功的步驟總結如下: 步驟一 下載並安裝相應軟體包: Apache:2.0.59版本,下載地址為:http://httpd.apache.org/,也可下載新版本的; Apache With SSL和OpenSSL庫:下載地址為http://hunter.campbus.com/,下載與Apache版本對應的壓縮包,相對Apache2.0.59來說需要下載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的安裝參照提示進行即可,另外兩個包也不需要單獨安裝。 步驟二 給Apache配置SSL支援: 解壓Apache_2.0.59-Openssl_0.9.8b-Win32.zip,拷貝bin目錄下的Apache.exe、ssleay32.dll 及libeay32.dll 到Apache安裝目錄下的bin目錄,一定要替換掉原有的Apache.exe,(註:也可以拷貝openssl.exe,這樣不需要解壓Openssl-0.9.8b-Win32.zip就可以產生簽署憑證)。拷貝conf目錄下的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為伺服器key,my-server.crt為伺服器憑證,可根據需要修改 注釋掉<IfDefine SSL>和</IfDefine>開啟SSL功能 修改httpd.conf檔案如下:去掉#LoadModule ssl_module modules/mod_ssl.so前邊的注釋。 在Apache安裝目錄下的conf檔案夾下建立存放認證檔案的ssl檔案夾。 注意:如果你的網域名稱無法使用的話,可能需要把httpd.conf中的ServerName改為:127.0.0.1:連接埠。我使用預設連接埠,故改為:127.0.0.1:80。 步驟三 產生認證檔案(詳請參看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 產生 CA private key openssl req -config openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr 產生CA require cert,照說明填入相關資料 openssl x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt 產生CA public cert openSSL genrsa -out ssl/server.key 1024 產生Server private key openssl req -config openssl.cnf -new -key ssl/server.key -out ssl/server.csr 產生Server require cert,資料據說最好要和上邊相同 openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt 產生Server public key 以上命令都成功執行的話會在剛才的ssl檔案夾下產生ca.crt、server.crt 及server.key三個檔案,把它們複製到Apache安裝目錄下conf目錄下前邊建立的ssl檔案夾中。也可以按照TortoiseSVN的協助文檔中的方法產生認證檔案。 注意:在上邊兩步填寫資料時,Common Name (eg, your websites domain name) []要填的和httpd.conf中的一樣,否則會出錯,在Apache的錯誤記錄檔中發現錯誤為“ 認證和伺服器名稱不匹配”(SA server certificate CommonName (CN) `127.0.0.1' does NOT match server name!?)。如果ServerName設為127.0.0.1:80的話,Common Name (eg, your websites domain name) []好像填localhost和127.0.0.1都可以。 ServerName為網域名稱的情況沒有嘗試,其實我覺得ServerName和這兩處資料的填寫,用自己的IP可能是最好的選擇。
在完成上邊的操作以後啟動Apache伺服器,不出錯的話就能使用https://localhost/來訪問伺服器了。
當熟悉Apache下配置SSL以後,相信你就可以自己修改相關參數並進行更深入的研究了。 Apache伺服器不能成功啟動時,可以通過查看Apache的Log尋求解決辦法。 參考資料: [1] 【懶人教學】建構您的 Apache + SSL on Win32 [2] The Apache + SSL on Win32 HOWTO [3] Windows 下安裝設定 Apache2 + PHP5 + mod_ssl [4] TortoiseSVN的協助文檔 |