1. 程式人生 > >Apache SSL伺服器配置SSL詳解

Apache SSL伺服器配置SSL詳解

1.安裝必要的軟體 
引用 
我用的是apahce2.0.61版,可以直接官方提供的繫結openssl的apache. 
檔名是:apache_2.0.61-win32-x86-openssl-0.9.7m.msi 

否則單獨安裝windows下的openssl比較麻煩,要麼找到一個第三方的編譯結果,要麼自己編譯 

2. 生成伺服器證書
引用 
安裝好在bin目錄下有一個 openssl.exe檔案,用來生成證書和金鑰。 
1). 生成伺服器用的私鑰檔案server.key 
進入conf目錄,執行命令列 
openssl genrsa -out server.key 1024 

有文件指出使用 openssl genrsa -des3 -out server.key 1024 生成私鑰檔案,這樣生成的私鑰檔案是需要口令的。 

Apache啟動失敗,錯誤提示是:Init: SSLPassPhraseDialog builtin is not supported on Win32 (key file .....) 
原因是window下的apache不支援加密的私鑰檔案。 

2). 生成未簽署的server.csr 
進入conf目錄,執行命令列 
openssl req -new -key server.key -out server.csr -config openssl.cnf 
提示輸入一系列的引數, 
...... 
Country Name (2 letter code) [AU]: 
State or Province Name (full name) [Some-State]: 

Locality Name (eg, city) []: 
Organization Name (eg, company) [Internet Widgits Pty Ltd]: 
Organizational Unit Name (eg, section) []: 
Common Name (eg, YOUR name) []: 
Email Address []: 
..... 
注:Common Name必須和httpd.conf中server name必須一致,否則apache不能啟動 
啟動apache時錯誤提示為:RSA server certificate CommonName (CN) `Koda' does NOT match server name!? 


3). 簽署伺服器證書檔案server.crt 
進入conf目錄,執行命令列 
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 

以上籤署證書僅僅做測試用,真正執行的時候,應該將CSR傳送到一個CA返回真正的用書.網上有些文件描述生成證書檔案的過程比較繁瑣,就是因為 
他們自己建立了一個CA中心證書,然後再簽署server.csr. 

用openssl x509 -noout -text -in server.crt可以檢視證書的內容。證書實際上包含了Public Key. 

3. 配置httpd.conf. 
引用 
在conf目錄下的ssl.conf檔案是關於ssl的配置,是httpd.conf的一部分。 
找到一個443的虛擬主機配置項,如下: 
<VirtualHost _default_:443> 
SSLEngine On 
SSLCertificateFile conf/ssl.crt/server.crt 
SSLCertificateKeyFile conf/ssl.key/server.key 
#SSLCertificateChainFile conf/ssl.crt/ca.crt // 暫未啟用 
#...... 
DocumentRoot "C:/programs/Apache2/htdocs" 
ServerName www.my.com:443 
</VirtualHost> 
1). 看SSLCertificateFile,SSLCertificateKeyFile兩個配置項,所以應該在conf下建立兩個子目錄ssl.crt, ssl.key,然後把簽署過的證書檔案(.crt)和私鑰檔案(.key)放在相應的目錄 
2). 看DocumentRoot,ServerName配置項,ServerName修改為任意你想要得域名,注意:前面生成.csr時輸入的Common Name必須於這裡的ServerName項一致。 
這樣啟動apache後,訪問https://www.my.com將訪問C:/programs/Apache2/htdocs目錄下的內容。 
但是如果你想保留其他目錄的訪問仍然是http,那麼你應該把 
<VirtualHost _default_:443> 也改為 <VirtualHost www.my.com:443> 
此時,即便ServerName是任意的,系統仍然正常執行,僅僅Apache log提示"does NOT match server name" 
3). 移除註釋行 
LoadModule ssl_module modules/mod_ssl.so 

注意到ssl.conf的配置都在標籤<IfDefine SSL>中,所以為了使IfDefine 指令有效,執行apache 的時候要加上 -D SSL 引數。 

引用 
apache -D SSL -k start