本地局域网使用自签名证书搭建Node.js HTTPS服务如何消除浏览器警告
解决方案
浏览器触发隐私连接警告的核心原因是你的自签名证书未被浏览器/操作系统的受信任根证书列表收录,可通过以下几种方案解决:
方案1:搭建内部私有CA(推荐多用户内网场景使用)
这是内网服务批量部署的最优方案,只需要一次配置,所有安装了根证书的内网用户都可以正常访问,无警告:
- 第一步:生成私有根CA的私钥和根证书
- 第二步:将生成的根证书分发给所有需要访问该服务的内网用户,指导用户将根证书导入到操作系统的受信任根证书颁发机构列表中,Chrome、Edge等多数浏览器会自动读取系统根证书列表,Firefox需要单独在浏览器设置中导入根证书
- 第三步:使用该私有根CA为你的Node.js服务签发服务端证书,必须配置SAN(主体备用名称)字段,将用户访问服务时用到的所有地址(如localhost、内网固定IP、内网域名等)全部填入SAN字段,目前新版浏览器已不再支持仅配置CN字段的证书
- 第四步:将新签发的服务端证书、私钥替换你当前Node.js配置中的对应文件即可,原有服务启动代码无需修改:
const options = { key: await fs.readFile('你的新服务端私钥路径', 'utf-8'), cert: await fs.readFile('你的新服务端证书路径', 'utf-8'), }; servers.https = https.createServer(options, this.app);
方案2:直接信任现有自签名证书(适合单用户/测试场景使用)
如果仅少量用户访问服务,也可以直接将你当前在用的自签名证书导入到用户的受信任根证书列表中,注意需要先给现有自签名证书补全SAN字段配置,否则新版浏览器依然会触发警告。
方案3:使用工具快速生成可信本地证书(适合本地开发调试场景)
如果是本地开发使用,可使用mkcert工具快速生成自动受本地系统信任的证书,无需手动执行复杂的openssl命令:
- 在有网络的设备上安装mkcert后,执行
mkcert -install生成本地根证书并自动添加到系统受信任列表 - 执行
mkcert localhost 192.168.x.x替换为你的服务访问地址,直接生成对应的服务端证书和私钥 - 将生成的证书、私钥文件拷贝到无网络的Node.js服务器上,替换现有配置中的文件即可
注意事项
- 新版Chrome、Edge等浏览器要求公开信任的证书有效期不得超过398天,私有CA签发的证书如果设置过长有效期也可能触发警告,建议将有效期设置在1年以内
- 如果使用内网域名访问服务,需要确保所有用户设备的DNS可以正确解析该域名到你的Node.js服务器IP
- 手机、平板等移动设备访问服务时,需要单独将根证书导入到移动设备的系统受信任根证书列表中
内容的提问来源于stack exchange,提问作者Ronny vdb
相关产品推荐
相关产品推荐

