有时在测试环境下要使用 https 服务,但是又没有正式的证书,这时我们可以自己签名一个临时证书用来提供 https 服务,然后通过修改浏览器的设置,允许使用该未授信证书,从而访问本地的 https 网站。
本文使用 Express 框架做演示
生成证书
首先检查是否安装了 openssl ,如果没安装需要先自行安装。
openssl version
//=> LibreSSL 2.8.3
然后进入 express 项目的根目录,新建目录,并使用 openssl 生成证书
mkdir ssl
openssl req -nodes -new -x509 -keyout ./ssl/localhost.key -out ./ssl/localhost.cert
生成过程会询问几个参数,注意 Common Name 要填写,这里我用的本机IP。
![](https://img.haomeiwen.com/i47153/f40d9d3495d993bd.png)
生成完成后查看 ssl 目录,会发现生成了2个新文件。
![](https://img.haomeiwen.com/i47153/8b604f99d6d6a64c.png)
express 服务代码
![](https://img.haomeiwen.com/i47153/8e718c7d05d0ba7e.png)
express 参考文档:https://www.expressjs.com.cn/4x/api.html#app.listen
页面访问
访问 http://localhost/ping ,正常返回
![](https://img.haomeiwen.com/i47153/4e312bf8944f50d2.png)
访问 https://localhost/ping ,页面无法加载
![](https://img.haomeiwen.com/i47153/5c56e6eef8692a7c.png)
因为我用的是 Chrome 浏览器,对于自己签名的,未授信证书,拒绝加载。需要修改 Chrome 设置,打开浏览器设置地址 chrome://flags/#allow-insecure-localhost
![](https://img.haomeiwen.com/i47153/1e1d05677df981cd.png)
更改为 Enabled ,然后需要重启浏览器
![](https://img.haomeiwen.com/i47153/b535a76519323338.png)
现在可以访问 https://localhost/ping 了。
![](https://img.haomeiwen.com/i47153/61e9368bc69e77e4.png)
如果依然无法访问并提示: NET::ERR_CERT_REVOKED,则尝试,先在Chrome浏览器的错误页面任意位置点击一下(不能是地址栏里),然后盲打输入 thisisunsafe
(参考:https://aboutssl.org/how-to-fix-net-err-cert-revoked-error/)。
注意事项
使用 openssl 生成证书时,如果不填 Common Name 参数,则只会生成一个 localhost.key 文件,无法正常启动服务。
![](https://img.haomeiwen.com/i47153/bbd49c23a073328c.png)
使用 openssl 生成证书时,key 文件和 cert 文件需要最好同时生成,否则会导致 key 和 cert 不匹配。
![](https://img.haomeiwen.com/i47153/009dcf7037592f86.png)
网友评论