本地HTTPS环境搭建的完整步骤记录
前言
之前在为公司的应用添加https时,是在nginx上配置的,这样不需要node做额外的开发,但是组内的开发同学本地一直没有配置,一直是采用http的方式开发和测试。最近发现有些case需要https来复现,比如Android5.0以上的app内,使用https的网站访问http的内容会阻止访问,这种问题测试的时候本地就需要一个https的环境。于是花了点时间学习了下本地https的搭建,在这里记录一下。下面话不多说了,来一起看看详细的介绍吧。
生成证书
本地开发的证书可以自己生成一个,可以通过以下步骤生成一个简单的证书:
首先,进入你想创建证书和私钥的目录,例如:
$cd/usr/local/nginx/conf
创建服务器私钥,命令会让你输入一个口令:
$opensslgenrsa-des3-outserver.key1024
创建签名请求的证书(CSR):
$opensslreq-new-keyserver.key-outserver.csr
配置https
nginx的https配置很简答,就是监听443端口,并且添加相关的ssl配置。
server{ listen80; listen443; sslon; ssl_certificatessl/server.crt; ssl_certificate_keyssl/server.key; }
再配置好你自己的upstream和location后就可以用https访问了。
这里踩了一个坑,因为我需要添加https的域名是配了虚拟主机的,但是我的ssh却没有在虚拟主机里添加,导致一开始并不能访问,这时候学习了一下如何去查nginx的问题。
先确认不是浏览器的问题,确实是nginx配置问题
wgetlocal.xxx.comok wgetlocal.xxx.com:443cantreceive
然后查了一下,nginx有两种日志,accesslog和errorlog。
其中accesslog日志记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息,errorlog则是记录服务器错误日志。
我先查了一下nginx的access.log没有日志,再查nginx的error.log有报错
2017/04/1814:07:10[error]18614#0:*168no"ssl_certificate"isdefinedinserverlisteningonSSLportwhileSSLhandshaking,client:192.168.2.1,server:0.0.0.0:443 2017/04/1814:07:10[error]18614#0:*169no"ssl_certificate"isdefinedinserverlisteningonSSLportwhileSSLhandshaking,client:192.168.2.1,server:0.0.0.0:443
最后发现是虚拟主机中没配ssh
无法使用http访问
细心的朋友可能已经看出来了,这个配置有一点问题,因为开启了ssl:on,导致使用http访问时会报错
TheplainHTTPrequestwassenttoHTTPSport
后续删掉了ssl:on这一行,并且对443端口的监听做了一下修改
listen443ssl;
mac信任证书的问题
配置完https后,mac用chrome打开时一直显示证书不受信任,需要点击确认才能继续往下进行,并且导致我的https的静态资源无法访问,可以用safari打开该网页后点击信任
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。