设为首页 收藏本站
查看: 789|回复: 0

[经验分享] Windows下搭建HTTP/HTTPS服务器及测试过程

[复制链接]

尚未签到

发表于 2017-6-29 07:29:04 | 显示全部楼层 |阅读模式
  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文件
  
该文件中有三段以 行结尾的文本。后面两段配置文本配置的是两个虚拟主机,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)将<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服务器了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-389156-1-1.html 上篇帖子: Windows下Nginx Virtual Host多站点配置详解 下篇帖子: 【caffe-windows】 caffe-master 之 classfication_demo.m 超详细分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表