欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。由于本站位于香港虚拟主机,故速度比较慢。

文摘  搭建本地HTTPS测试环境的方法

其他 网络 326 0评论

使用 https 的网站访问 http 的内容会阻止访问,这种问题测试的时候本地就需要一个 https 的环境。于是花了点时间学习了下本地 https 的搭建,在这里记录一下。


一、windows+php+apache本地配置HTTPS


1.默认是已经配置好了lamp的环境,下面讲解如何搭建https协议服务器。

修改两个配置文件,一个为conf/httpd.conf,另一个为conf/extra/httpd-ssl.conf


a. 在httpd.conf中删掉以下语句前的’#’

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-mpm.conf

Include conf/extra/httpd-ssl.conf


b. httpd-ssl.conf中把相应选项改成如下,有’#’的删掉

SSLCertificateFile "c:/Apache24/conf/server.crt"

SSLCertificateKeyFile "c:/Apache24/conf/server.key"

SSLCACertificateFile "c:/Apache24/conf/ca.crt"

SSLVerifyClient require

SSLVerifyDepth  1


2.生成各种证书 

进入Apache24\bin目录,在对应文件夹下打开cmd 

这里需要一个openssl的配置文件openssl.cnf,如果他不在 conf文件夹下,可以去网上下一个,建议把它放到bin目录下,这样子敲命令比较方便。


a. 首先要生成服务器端的私钥(key文件):

set OPENSSL_CONF=openssl.cnf

openssl genrsa -des3 -out server.key 1024


b. 生成server.csr ,Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.

openssl req -new -key server.key -out server.csr -config openssl.cnf


c. 对客户端也作同样的命令生成key及csr文件

openssl genrsa -des3 -out client.key 1024

openssl req -new -key client.key -out client.csr -config openssl.cnf


d. CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf


e. 在bin目录下新建一个demoCA文件夹,进入它 

新建newcerts文件夹,不需要进入 

新建index.txt 

新建serial,打开后输入01保存即可


f. 用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf


g. 生成一个ca.pfx,打开IE浏览器-》工具-》Internet选项-》内容-》证书,按照提示导入,这里要输入刚才生成 .pfx 过程中输入的密码 

openssl pkcs12 -export -in ca.crt -inkey ca.key -out ca.pfx.


h.在httpd.conf中找到下面这句话 #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 取消注释(删掉前面的"#")


i.openssl rsa -in server.key -out server.key

把生成的server.key复制到conf目录下覆盖 然后打开httpd-ssl.conf 找到SSLPassPhraseDialog builtin 在前面加上#


重启apache即可https访问项目。


备注:

1、cmd命令界面图示例:

111.jpg


2、刚刚下载的PHP有两个ini文件,他们的区别是

222.jpg


3、上面有个在IE导入证书的我也不知道是什么来的,效果图:


访问的效果图:

555.jpg

在上面的F步骤之中可能出现的错误是:

666.jpg


解决办法:进入demoCA,然后打开index.txt.attr,把它修改成unique_subject = no就可以了 

777.jpg


二、windows+php+nginx本地配置HTTPS


1.生成证书

本地开发的证书可以自己生成一个,可以通过以下步骤生成一个简单的证书:


首先,进入你想创建证书和私钥的目录,例如:

$ cd /usr/local/nginx/conf


创建服务器私钥,命令会让你输入一个口令:

$ openssl genrsa -des3 -out server.key 1024


创建签名请求的证书(CSR):

$ openssl req -new -key server.key -out server.csr


2.配置https

nginx 的 https 配置很简答,就是监听 443 端口,并且添加相关的 ssl 配置。

server {

         listen  80;

         listen  443;  

         ssl on;

         ssl_certificate ssl/server.crt;

         ssl_certificate_key ssl/server.key;     

}


验证配置,重启nginx

$ sudo nginx -t && sudo nginx -s reload


再配置好你自己的 upstream 和 location 后就可以用 https 访问了。


这里踩了一个坑,因为我需要添加 https 的域名是配了虚拟主机的,但是我的 ssh 却没有在虚拟主机里添加,导致一开始并不能访问,这时候学习了一下如何去查 nginx 的问题。


先确认不是浏览器的问题,确实是nginx配置问题

wget local.xxx.com ok

wget local.xxx.com:443 cant receive

然后查了一下,nginx有两种日志,access log 和 error log。

其中 access log 日志记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息,error log 则是记录服务器错误日志。


我先查了一下nginx的access.log 没有日志,再查nginx的error.log 有报错

2017/04/18 14:07:10 [error] 18614#0: *168 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 192.168.2.1, server: 0.0.0.0:443

2017/04/18 14:07:10 [error] 18614#0: *169 no "ssl_certificate" is defined in server listening on SSL port while SSL handshaking, client: 192.168.2.1, server: 0.0.0.0:443

最后发现是虚拟主机中没配ssh


无法使用http访问

细心的朋友可能已经看出来了,这个配置有一点问题,因为开启了ssl:on,导致使用 http 访问时会报错

The plain HTTP request was sent to HTTPS port

后续删掉了ssl:on这一行,并且对443端口的监听做了一下修改

listen 443 ssl;


mac信任证书的问题

配置完https后,mac 用 chrome 打开时一直显示证书不受信任,需要点击确认才能继续往下进行,并且导致我的 https 的静态资源无法访问,可以用safari打开该网页后点击信任


现在想知道 httpd.conf 和 \extra\httpd-vhosts.conf  和 \extra\httpd-ssl.conf的关系吗?就是配置文件啊,这两个是配置HTTP的,还有一个是配置HTTPS协议的。现在关键是HTTPS是什么东西啊?


HTTPS密文传输与公钥私钥、CA证书之间的关系。

他是如何实现密文传输的,如何实现任何人劫持客户端与服务端的通信也能保证,客户端的数据(比如用户名密码不被篡改的)。


文章推荐:

数字证书与CA的扫盲介绍:

https://kb.cnblogs.com/page/194742/ 


也许,这样理解HTTPS比较容易:

https://kb.cnblogs.com/page/563885/ 


HTTPS为什么安全 &分析 HTTPS 连接建立全过程:

http://wetest.qq.com/lab/view/110.html 


数字证书的基础知识:

http://www.enkichen.com/2016/02/26/digital-certificate-based/ 


OpenSSL主要配置文件openssl.cnf:

https://www.cnblogs.com/f-ck-need-u/p/6091027.html 


参考网址:

https://www.cnblogs.com/xuweiqiang/p/7234571.html 

https://www.cnblogs.com/ccw869476711/p/8715812.html 

https://segmentfault.com/a/1190000007990972 

https://segmentfault.com/a/1190000009321887 


转载请注明: ITTXX.CN--分享互联网 » 搭建本地HTTPS测试环境的方法

最后更新:2019-02-13 18:24:39

赞 (2) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽