这几天忙于研究给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./里边提供的压缩包Apache_2.0.59-Openssl_0.9.8b-Win32.zip解压缩以后,在按照前边几篇文章中给的方法生成相关文件并修改配置以后发现就成功配置了。今天在写Blog时回头再看了一眼文档发现,以前是因为没有拷贝Apache.exe至Apache安装目录导致不能成功的。现将能正确配置成功的步骤总结如下: 步骤一 下载并安装相应软件包: Apache:2.0.59版本,下载地址为:http://httpd./,也可下载新版本的; Apache With SSL和OpenSSL库:下载地址为http://hunter./,下载与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:///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寻求解决办法! 参考资料: |
|