Windows下搭建HTTP/HTTPS服务器及测试过程

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中需指明端口号,格式是:http://hostip:port
其中,hostip指HTTP服务器主机的IP或域名,port是HTTP服务器侦听端口号
建议使用默认值80,若改为其他值,在服务器上用wireshark抓IP进行分析时,wireshark不能解析HTTP报文,不利于分析。
2)将DocumentRoot "${SRVROOT}/htdocs"用#注释掉,改为 DocumentRoot "D:\httpdocs"

#DocumentRoot "${SRVROOT}/htdocs"
DocumentRoot "D:\httpdocs"

3)将<Directory "${SRVROOT}/htdocs">用#注释掉,改为 <Directory "D:\httpdocs">

#<Directory "${SRVROOT}/htdocs">
    <Directory "D:\httpdocs">

注:
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行用#号注释掉

<Directory "${SRVROOT}/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

增加以下行:

<Directory "D:\httpsdocs">
    SSLOptions +StdEnvVars
    Options +Indexes FollowSymLinks +ExecCGI
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all
</Directory>

此处若不做修改,HTTPS服务器会无法访问,浏览器会显示403错误,错误信息是“服务器可能要求登录”。
注:
与设置HTTP服务器时类似,DocumentRoot和Directory表示HTTPS访问的文件根目录,可以设置成任何目录,但DocumentRoot和Directory设置值必须保持一致
7)如果需要设置SSL双向认证,需要将以下两行前的#注释符删掉(即取消注释):

SSLVerifyClient require
SSLVerifyDepth  10

5.2 修改Apache24\conf\extra\httpd-ahssl.conf文件
该文件中有三段以 <VirtualHost default:443>行开始,以行结尾的文本。后面两段配置文本配置的是两个虚拟主机,ServerName分别是serverone.tld:443和servertwo.tld:443。这两个虚拟主机我们都不用,因此将后面两段<VirtualHost default:443>到之间(包括这两行)的内容用#注释掉。
接下来修改第一段<VirtualHost default: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)将<Directory "${SRVROOT}/htdocs">注释掉,修改为<Directory "D:\httpsdocs">

# <Directory "${SRVROOT}/htdocs">
<Directory "D:\httpsdocs">

注:
若此处是

<Directory "${SRVROOT}/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

那么需要将这3行注释掉,增加以下行

<Directory "D:\httpsdocs">
        SSLOptions +StdEnvVars
        Options +Indexes FollowSymLinks +ExecCGI
        AllowOverride AuthConfig FileInfo
        Order allow,deny
        Allow from all
</Directory>

安装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服务器了。

转载于:https://www.cnblogs.com/dengzh/p/6389350.html

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值