霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

Windows下配置Apache2.X+SSL心得

(关于Apache配置SSL协议的方法,我从网上摘了一篇文章,可能对大家有帮助)

这几天忙于研究给Apache 2 配置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为服务器证书,可根据需要修改

注释掉和开启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的帮助文档