/ 中存储网

在Windows系统下配置Apache服务器的SSL加密访问

2013-12-27 10:02:01 来源:kejihao

新发现:有个叫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,而其内容会写到配置文件confhttpd.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端口可以通过confhttpd.conf修改,找到里面的“Listen 80”, 80就是Apache聆听的端口号,改为你想要的端口号。而 "ServerName xxxx:80" 这句的80改不改都没有关系。这个安装过程中Apache会自动设置配置文件confhttpd.conf。若该文件已存在,则新的配置文件存为 confhttpd.conf.default。而htdocsindex.html则不会被修改。

Apache安装完毕后可以在浏览器中键入 http://localhost (如果端口不是80,还要加上自己设的端口号)。如果呈现了htdocsindex.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在confextra目录下。

这里,我假设你已经获取了相应的服务器证书。由于网络上讲述建立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是多少的话,右击网站下面的默认网站-属性-网站,点下面的“属性”,在最下面一行是不是写着W3SVC1exjjmmtt.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的logserror.log 和 ssl 的 logserror_log 查找问题所在。

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

File: httpd-ssl.conf

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

Listen 443

SSLSessionCache  none

SSLMutex default

<VirtualHost _default_:443>

DocumentRoot "D:/Programme/Apache2.2/htdocs"

ServerName localhost:443

ServerAdmin [email protected]

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

</VirtualHost>