阿芙官网查真伪:在Windows系统下搭建带SSL加密的Apache服务器

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 16:19:50
 在Apache服务器上配置subversion 签署获取服务器证书

在Windows系统下搭建带SSL加密的Apache服务器  

2008-02-18 23:51:03|  分类: SSL |  标签: |字号大中小 订阅


新发现:有个叫xampp的东东可以方便的搭建Apache服务器。可惜我没时间测试了,大家请看http://www.apachefriends.org/zh_cn/xampp-windows.html

Apache是世界使用排名第一的Web服务器软件。有了它,电脑就可成为一台Web服务器,可以在上面建网站,开SVN,以及其他http所能提供的各种服务。
 
首先从http://httpd.apache.org/download.cgi 下载最新的Apache带ssl版本。建议选择openssl和apache2组装好的win32版安装包。当然你也可以下载zip文件,然后自己编译安装,不过需要确保自己机器上有Visual C++ 2005。
注意:官方提供的Apache2.2.6有bug,将造成应用程序出错。如果要用2.2.6的话,请到http://www.apachelounge.com/download/ 下载打好补丁的版本。

运行msi安装包,安装时会询问你domain name、server name与admin email,而其内容会写到配置文件conf\httpd.conf文件内
1、 Network Domain 输入你的服务器所在的网络域。例如你的服务器DNS全称是server.mydomain.net,你这里就填mydomain.net。如果你的电脑没有DNS名称,你可以输入IP地址,或者直接localhost
2、 Server Name 输入你服务器的DNS全称,或IP地址,或直接localhost
3、 Administrator's Email Address. 管理员邮箱地址 填自己的邮箱喽,或者随便啥子
4、 For whom to install Apache 推荐选择 for All Users, on Port 80, as a Service。这样Apache会作为一项服务自动运行。但要注意端口号80不能与其他程序重复。经常可能遇见的是IIS服务使用80端口。所以,安装之前请先检查你的服务器是否安装IIS。因为Apache预设的80 端口跟IIS冲突,你要么更改Apache的端口,要么更改IIS端口或直接把IIS关闭,再接下去安装Apache。除了IIS服务外,QQ和 Skype也是要注意的对象。

TIP:对于端口占用情况,可通过在cmd命令行窗口输入
# netstat -ano
查出相应连接端口的PID,然后用tasklist命令或者任务管理器来查询相应的PID对应的程序

TIP:关于IIS网站端口号的修改:控制面板-管理工具-IIS,右击 网站 下面的 默认网站-属性-TCP端口,把80改成别的就可以了,如8080

安装好后的Apache端口可以通过conf\httpd.conf修改,找到里面的“Listen 80”, 80就是Apache聆听的端口号,改为你想要的端口号。而 "ServerName xxxx:80" 这句的80改不改都没有关系。这个安装过程中Apache会自动设置配置文件conf\httpd.conf。若该文件已存在,则新的配置文件存为 conf\httpd.conf.default。而htdocs\index.html则不会被修改。

Apache安装完毕后可以在浏览器中键入 http://localhost (如果端口不是80,还要加上自己设的端口号)。如果呈现了htdocs\index.html里的内容It works,那么你的Apache就安装成功了。

二、在Apache服务器上配置SSL

因为我们之前直接安装了带openssl的Apache版本,所以就不需要另外下载安装opsenssl了。当然你也可以从http://www.openssl.org下载最新的源码进行编译

libeay32.dll,ssleay32.dll和openssl.exe应该在Apache的bin目录下;
mod_ssl.so在modules目录下;
openssl.cnf在conf目录下(建议改后缀名为conf,不然windows会把它当作别的文件类型);
httpd-ssl.conf在conf\extra目录下。

这里,我假设你已经获取了相应的服务器证书。由于网络上讲述建立ssl证书的文章很多也很乱,关于服务器证书的获取将在另一篇文章中专门讲述。这里仅涉及Apache服务器上的ssl配置。

首先需要注意别的应用程序不能占用ssl默认的443端口!比如IIS就会占用它,如果需要同时提供IIS服务,也必须把IIS的安全端口改了。

TIP:IIS网站443端口号无法直接更改,我们需要进入cmd命令行窗口输入命令
# cscript adsutil.vbs set w3svc/1/securebindings ":8443:"
这里把端口改成了8443。其中w3svc后面跟的1是网站的ID。需要确认你的网站ID是多少的话,右击网站下面的默认网站-属性-网站,点下面的“属性”,在最下面一行是不是写着W3SVC1\exjjmmtt.log?W3SVC后面跟的那个数字就是ID了。

下面我们来配置Apache+SSL

1、conf/httpd.conf里的设置比较简单,只要将下列两行前面的#去掉
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
改完后保存

2、打开conf/extra/httpd-ssl.conf
将# SSLMutex file:logs/ssl_mutex
改为 SSLMutex default 或SSLMutex none
并修改VirtualHost设置(DocumentRoot, ServerAdmin, ServerName, ErrorLog, TransferLog),这里同Apache设置差不多。

3、接着改conf/extra/httpd-ssl.conf里的证书文件设置
需要修改SSLCertificateFile与SSLCertficateKeyFile指向 .cert 和 .key 文件。
指定服务器证书位置,需要根据自己情况相应修改
SSLCertificateFile "D:/Programme/Apache2.2/bin/ssl/myserver.crt"
指定服务器证书私钥key位置,需要根据自己情况相应修改
SSLCertificateKeyFile "D:/Programme/Apache2.2/bin/ssl/private/myserver.key"

如果你的服务器证书是自签名的,没有CA认证,那么以下都可以屏蔽掉
#SSLCertificateChainFile "D:/Programme/Apache2.2/conf/server-ca.crt"
#SSLCACertificatePath "D:/Programme/Apache2.2/conf/ssl.crt"
#SSLCACertificateFile "D:/Programme/Apache2.2/conf/ssl.crt/ca-bundle.crt"
#SSLCARevocationPath "D:/Programme/Apache2.2/conf/ssl.crl"
#SSLCARevocationFile "D:/Programme/Apache2.2/conf/ssl.crl/ca-bundle.crl"

如果有CA认证,则应填入相应的CA证书目录及位置
CA证书目录,需要根据自己情况相应修改
SSLCACertificatePath "D:/Programme/Apache2.2/bin/ssl/"
CA证书位置,需要根据自己情况相应修改
SSLCACertificateFile "D:/Programme/Apache2.2/bin/ssl/cacert.pem"

如果不需要浏览端认证,以下可以暂时不管
#SSLVerifyClient require
#SSLVerifyDepth  10

修改完后保存。重启Apache,不出错的话就能使用https://localhost/来访问服务器了(前提是你有相关证书在你提供的位置)。若无法成功启动,可通过Apache的logs\error.log 和 ssl 的 logs\error_log 查找问题所在。

当熟悉了如何在Apache上配置SSL以后,就可以自己修改相关参数进行研究了。

File: httpd-ssl.conf

###############################################################

Listen 443

SSLSessionCache  none
SSLMutex default

DocumentRoot "D:/Programme/Apache2.2/htdocs"
ServerName localhost:443
ServerAdmin yourname@mail.com
ErrorLog "D:/Programme/Apache2.2/logs/error_log"
TransferLog "D:/Programme/Apache2.2/logs/access_log"

SSLEngine on

SSLCertificateFile "D:/Programme/Apache2.2/bin/ssl/myserver.crt"
SSLCertificateKeyFile "D:/Programme/Apache2.2/bin/ssl/private/myserver.key"
SSLCACertificatePath "D:/Programme/Apache2.2/bin/ssl/"
SSLCACertificateFile "D:/Programme/Apache2.2/bin/ssl/cacert.pem"

#SSLVerifyClient require
#SSLVerifyDepth  10