内容提要
本文介绍如何在本地搭建Node.js HTTPS环境。首先用OpenSSL生成私钥、证书申请文件并自签名证书;然后改造Koa应用,同时启动HTTP和HTTPS服务,读取证书密钥监听443端口;最后说明浏览器访问时可能遇到证书无效错误,可通过Chrome标志或输入“thisisunsafe”绕过。
延伸解读
自签名证书的适用场景与限制
自签名证书适合本地开发或内网测试,能快速模拟HTTPS环境,但浏览器会提示证书无效,因为证书未被受信任的CA签发。生产环境必须使用受信任的证书,否则用户会看到安全警告。文中提到的绕过方法仅适用于本地调试,不应在生产环境使用。
同时启动HTTP和HTTPS的实践
改造Koa应用时,同时启动HTTP和HTTPS服务,可以兼顾开发便利和HTTPS测试需求。HTTP服务保留原端口,HTTPS服务监听443端口,实现通过https://localhost直接访问。这种双服务模式在本地开发中常见,但需注意端口占用和证书路径配置。
浏览器安全提示的应对
新版Chrome对无效证书限制严格,无法直接跳过。文中提供两种方法:开启chrome://flags中的allow-insecure-localhost,或在错误页面输入thisisunsafe。后者更快捷,但需注意仅适用于本地环境,且可能降低安全性,使用后应恢复默认设置。
Q&A
如何在本地搭建Node.js HTTPS环境?
首先用OpenSSL生成私钥、证书申请文件并自签名证书,然后改造Koa应用,同时启动HTTP和HTTPS服务,读取证书密钥监听443端口。
用OpenSSL生成自签名证书的具体命令是什么?
生成私钥:openssl genrsa -out server.key 1024;生成证书申请文件:openssl req -new -key server.key -out server.csr;用私钥对申请文件签名生成证书:openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650。
在生成证书申请文件时,Common Name应该填什么?
Common Name需要输入localhost,也可以输入*.domain.com申请通配符域名证书。
如何让Koa应用同时支持HTTP和HTTPS?
使用http.createServer(app.callback()).listen(PORT)启动HTTP服务,同时使用https.createServer(options, app.callback()).listen(443)启动HTTPS服务,其中options包含读取的私钥和证书。
浏览器访问本地HTTPS服务时出现证书无效错误怎么办?
有两种解法:一是去chrome://flags/#allow-insecure-localhost开启允许无效证书选项;二是在当前提示错误的页面输入thisisunsafe告诉Chrome忽略警告。
为什么需要本地HTTPS环境?
为了方便做一些模拟验证,比如调试验证一些协议是https的内嵌页面。