1 安装Apache
http://www.apachehaus.com/cgi-bin/download.plx
选择合适的版本下载
本次下载的是 Apache 2.4.x VC14
Apache版本号:httpd-2.4.25-x64
OpenSSL版本号:OpenSSL 1.0.2j
解压后按照readme_first.html文档中步骤进行测试和安装:
1)将解压后的Apache24文件夹复制到C:\
2)在命令行输入
cd C:\Apache24\bin
3)测试Apache安装条件是否满足
在命令行输入
httpd.exe
若无错误,在IE浏览器地址栏输入http://localhost,若能正常打开网页说明Apache能正常安装;若报错,根据错误提示排除错误,直到可以正常运行httpd.exe并能访问http://localhost
4)开始安装
在命令行输入
httpd -k install
完成安装后没有图形操作界面,Apache所有操作都在命令行进入 C:\Apache24\bin目录后用命令完成的,详见后文。
2 Apache常用操作命令
安装Apache24后没有图形界面,需要在命令行操作,首先进入Apache bin目录
cd C:\Apache24\bin
常用命令:
httpd -k install /* 安装Apache
/
httpd -k uninstall /
卸载Apache
/
httpd -k start /
启动Apache
/
httpd -k stop /
停止Apache
/
httpd -k retart /
重启Apache */
3 制作CA证书、Server证书和Client证书
3.1 准备工作
在C:\Apache24\bin目录下创建demoCA目录,并在该目录下创建如下几个文件和文件夹
index.txt
newcerts\
serial
注:
serial文件没有文件后缀
用文本编辑器打开serial,并写入'01'(实际操作时不要加引号)
打开命令行,进入C:\Apache22\bin
cd C:\Apache22\bin
3.2 生成CA证书
1)生成CA私钥
openssl genrsa -out ca.key 2048
命令描述:
该命令会在当前目录下生成一个私钥文件ca.key
参数说明:
gensa:生成rsa密钥
-out:指定输出的文件名
2048:密钥长度
2)生成CA证书
openssl req -new -x509 -days 5000 -key ca.key -out ca.crt
命令描述:
该命令会在当前目录下生成一个自签名的CA证书文件ca.crt
参数说明:
req:请求操作
-new:生成新的文件
-x509:证书文件的格式
-days:证书有效期
-key:指定私钥文件
-out:指定输出文件
注:
由于CA文件是用来给其他证书签名文件签名以生成对应的证书文件的,不需要其他文件给CA证书签名,因此生成的CA证书是自签名的。
3.3 生成Server端证书
1)生成Server证书私钥
openssl genrsa -out server.key 2048
2)生成Server证书请求文件
openssl req -new -key server.key -out server.csr
命令描述:
该命令会在当前目录下生成一个证书请求文件server.csr,用CA证书给证书请求文件签名后即可生成证书文件。
参数说明:
req:请求操作
-new:生成新的文件
-key:指定私钥文件
-out:指定输出文件
运行该命令时,命令行会提示输入CountryName(填CN),ProvinceName和CommonName等。CommonName(公用名)是个很重要的参数,如果要在外网访问HTTP/HTTPS服务器,CommonName必须填服务器的域名或者公网IP;如果只在内网做测试,CommonName可以填服务器主机的内网IP。
注:
由于Server的证书请求文件需要被CA证书文件签名后才能生成证书文件,不能使用自签名,因此不使用-x509选项
3)生成Server证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
命令描述:
该命令使用CA证书对证书请求文件签名,以生成证书文件
参数说明:
ca:表示是对证书请求文件进行签名
-in:指定输入的证书请求文件
-out:指定输出文件
-cert:指定CA证书文件
-keyfile:指定CA私钥文件
4)验证Server证书
openssl verify -CAfile ca.crt server.crt
命令描述:
该命令用于验证生成的证书文件是否正确,若正确则输出OK,若错误则输出ERROR。
命令说明:
verify:表示是对证书文件进行认证
-CAfile:指定CA证书文件
3.4 生成Client端证书
1)生成Client私钥
openssl genrsa -out client.key 2048
2)生成Client证书请求文件
openssl req -new -key client.key -out client.csr
注意:
生成Client端证书请求文件时,ON(Organization Name)必须与生成服务器时使用的ON一样,并且OU(Organizational Unit Name)和CN(Common Name)不能与生成Server端证书请求文件时使用的OU和CN相同,否则会报错,原因是不能同时给同一个Server生成两个证书请求文件。
3)生成Client证书
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key
4)验证Client证书
openssl verify -CAfile ca.crt client.crt
5)生成p12格式的Client证书
openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx
注:
由于在Windows下浏览器只能安装p12格式的客户端证书,因此要将.crt格式的Client证书转换成p12格式的证书。在SSL双向认证时需要客户端也安装自己的证书文件。
4 配置HTTP服务器
修改 Apache24\conf\httpd.conf 文件:
1)修改侦听端口号,将‘Listen 80’中的80改为想要设置的HTTP侦听端口号
若改成80端口以外的端口号,在用浏览器访问HTTP服务器时,URL中需指明端口号,格式是:
其中,hostip指HTTP服务器主机的IP或域名,port是HTTP服务器侦听端口号
建议使用默认值80,若改为其他值,在服务器上用wireshark抓IP进行分析时,wireshark不能解析HTTP报文,不利于分析。
2)将DocumentRoot " \({SRVROOT}/htdocs"用#注释掉,改为 DocumentRoot "D:\httpdocs" #DocumentRoot "\) {SRVROOT}/htdocs"
DocumentRoot "D:\httpdocs"
3)将用#注释掉,改为 #
注:
D:/httpdocs就是HTTP访问的文件根目录,也可以改成其他文件目录,但DocumentRoot和Directory中的目录必须一致
5 配置HTTPS服务器
5.1 修改 Apache24\conf\httpd-ssl.conf 文件
1)修改侦听端口号,将‘Listen 433'中的443改为想要侦听的端口。
同样建议使用默认值443,若改为其他值,在服务器上用wireshark抓IP进行分析时,wireshark不能解析HTTPS报文。
2)将 SSLCertificateFile 后面的服务器证书文件路径修改为 " \({SRVROOT}/conf/ssl/server.crt" SSLCertificateFile "\) {SRVROOT}/conf/ssl/server.crt"
SRVROOT变量的值就是“/Apache24”
3)将SSLCertificateKeyFile后面的服务器私钥文件路径修改为 " \({SRVROOT}/conf/ssl/server.key" SSLCertificateKeyFile "\) {SRVROOT}/conf/ssl/server.key"
4)将SSLCACertificateFile后面的CA证书文件路径修改为 " \({SRVROOT}/conf/ssl/ca.crt" SSLCACertificateFile "\) {SRVROOT}/conf/ssl/ca.crt"
此项设置只用于双向认证,如果不需要做双向认证,CA证书路径不设置
5)将DocumentRoot后面的文件路径修改为 "D:\httpsdocs"
DocumentRoot "D:\httpsdocs"
6)将以下3行用#号注释掉
SSLOptions +StdEnvVars
增加以下行:
SSLOptions +StdEnvVars
Options +Indexes FollowSymLinks +ExecCGI
AllowOverride AuthConfig FileInfo
Order allow,deny
Allow from all
此处若不做修改,HTTPS服务器会无法访问,浏览器会显示403错误,错误信息是“服务器可能要求登录”。
注:
与设置HTTP服务器时类似,DocumentRoot和Directory表示HTTPS访问的文件根目录,可以设置成任何目录,但DocumentRoot和Directory设置值必须保持一致
7)如果需要设置SSL双向认证,需要将以下两行前的#注释符删掉(即取消注释):
SSLVerifyClient require
SSLVerifyDepth 10
5.2 修改Apache24\conf\extra\httpd-ahssl.conf文件
该文件中有三段以 行结尾的文本。后面两段配置文本配置的是两个虚拟主机,ServerName分别是serverone.tld:443和servertwo.tld:443。这两个虚拟主机我们都不用,因此将后面两段之间(包括这两行)的内容用#注释掉。
接下来修改第一段之间的配置文本,ServerName是localhost:443。
1)修改侦听端口号,将‘Listen 433'中的443改为想要侦听的端口。
建议使用443默认值,若改为其他值,在服务器上用wireshark抓IP进行分析时,wireshark不能解析HTTPS报文。
2)将SSLCertificateFile后面的服务器证书路径修改为 " \({SRVROOT}/conf/ssl/server.crt" SSLCertificateFile "\) {SRVROOT}/conf/ssl/server.crt"
3)将SSLCertificateKeyFile后面的服务器私钥文件路径修改为 " \({SRVROOT}/conf/ssl/server.key" SSLCertificateKeyFile "\) {SRVROOT}/conf/ssl/server.key"
4)将DocumentRoot " \({SRVROOT}/htdocs" 注释掉,修改为DocumentRoot "D:/httpsdocs" # DocumentRoot "\) {SRVROOT}/htdocs"
DocumentRoot "D:\httpsdocs"
5)将注释掉,修改为 #
注:
若此处是
SSLOptions +StdEnvVars 那么需要将这3行注释掉,增加以下行 SSLOptions +StdEnvVars Options +Indexes FollowSymLinks +ExecCGI AllowOverride AuthConfig FileInfo Order allow,deny Allow from all 安装httpd-2.4.25-x64时此处此处已经改好了,不需要另外做修改;但在安装httpd-2.2.32-x86时发现需要修改的。 6)如果要配置SSL双向认证,需在SSLCertificateKeyFile "\) {SRVROOT}/conf/ssl/server.key"行之后增加以下3行内容:
SSLCACertificateFile "${SRVROOT}/conf/ssl/ca.crt"
SSLVerifyClient require
SSLVerifyDepth 10
5.3 配置SSL单向认证/双向认证
如果需要将HTTPS服务器配置成SSL双向认证,打开5.2节7)的设置和5.3节7)的设置,重启Apache;
如果需要将HTTPS服务器配置成SSL单向认证,将5.2节7)的设置和5.3节7)的设置注释掉,重启Apache;
6 浏览器测试
测试之前,在D:/httpdocs目录下新建一个index.html文件,用文本编辑器打开后写入“HTTP works”;在D:/httpsdocs目录下同样新建一个index.html文件,写入“HTTPS works”。
6.1 测试HTTP服务器
在局域网内另一台电脑的IE浏览器地址栏输入http://hostip,其中hostip是服务器主机的IP或域名。
如果浏览器中显示“HTTP如果浏览器中显示“HTTP works”,表示HTTP服务器工作正常。
6.2 测试HTTPS单向认证
按照第5章的描述将HTTPS服务器设置成SSL单向认证
1)在IE浏览器地址栏输入https://hostip(hostip是服务器的IP或域名),此时无法正常访问服务器,原因是没有导入服务器的证书和CA证书。
2)导入服务器证书和CA证书
打开IE浏览器"Internet选项"——>“内容”——>“证书”,在弹出的“证书”窗口中,点击“受信任的根证书颁发机构”,导入ca.crt文件;然后点击“受信任的发布者”,导入server.crt文件。
3)重启IE浏览器,在地址栏输入https://hostip,如果显示“HTTPS works”,则表示HTTPS服务器工作正常。
6.3 测试HTTPS双向认证
按照第4章的描述将HTTPS服务器设置成SSL双向认证
1)在IE浏览器地址栏输入https://hostip
此时会发现,虽然已经导入服务器的证书和CA证书,但仍然无法正常访问HTTPS服务器,原因是设置了SSL双向认证后,服务器也会对客服端进行认证,只有受信任的客户端才能访问服务器。
2)双击client.pfx文件,安装客户端证书
完成客户端证书的安装后,在IE浏览器“Internet选项”——>“内容”——>“证书”——>"个人“中看到安装的client证书
3)重启IE浏览器,在地址栏输入https://iphost
这时会发现就已经可以正常访问HTTPS服务器了。