Express 快速创建 https 服务

2020-11-04  本文已影响0人  _delong

有时在测试环境下要使用 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。

生成证书

生成完成后查看 ssl 目录,会发现生成了2个新文件。

证书文件

express 服务代码

服务示例

express 参考文档:https://www.expressjs.com.cn/4x/api.html#app.listen

页面访问

访问 http://localhost/ping ,正常返回

http

访问 https://localhost/ping ,页面无法加载

https

因为我用的是 Chrome 浏览器,对于自己签名的,未授信证书,拒绝加载。需要修改 Chrome 设置,打开浏览器设置地址 chrome://flags/#allow-insecure-localhost

默认

更改为 Enabled ,然后需要重启浏览器

更改

现在可以访问 https://localhost/ping 了。

https

如果依然无法访问并提示: NET::ERR_CERT_REVOKED,则尝试,先在Chrome浏览器的错误页面任意位置点击一下(不能是地址栏里),然后盲打输入 thisisunsafe (参考:https://aboutssl.org/how-to-fix-net-err-cert-revoked-error/)。

注意事项

使用 openssl 生成证书时,如果不填 Common Name 参数,则只会生成一个 localhost.key 文件,无法正常启动服务。

缺少文件

使用 openssl 生成证书时,key 文件和 cert 文件需要最好同时生成,否则会导致 key 和 cert 不匹配。

image.png
上一篇 下一篇

猜你喜欢

热点阅读