Express配置自签名SSL证书是否正确?如何验证证书已生效?
配置正确性说明
你的现有代码存在核心错误:你使用的是Node.js原生http模块创建服务,该模块不会识别你传入的key和cert参数,你当前实际运行的是普通HTTP服务,只是占用了HTTPS默认的443端口,并未启用SSL加密,也没有用到你生成的自签名证书。
修正方案非常简单,只需要把创建服务的模块换成https即可,修正后的核心代码如下:
const express = require("express"); const fs = require("fs"); const app = express(); const port = 443; app.get("/", (req, res) => { res.send("IT'S WORKING!"); }); // 替换http为https模块 require("https") .createServer( { key: fs.readFileSync("privateKey.key"), cert: fs.readFileSync("certificate.crt"), }, app ) .listen(port, () => { console.log(`Listening on port ${port}!`); });
修改后重启服务,你的SSL配置就正式生效了。
自签名SSL证书生效验证方法
- 浏览器验证:访问
https://localhost:443,首先会触发浏览器的不安全连接警示,这是自签名证书未被系统信任的典型表现。手动选择「高级-继续访问」后,点击地址栏左侧的「不安全」/锁形标识,选择「查看证书」即可查看当前连接使用的证书完整信息,和你生成的自签名证书信息(如颁发者、有效期、公钥指纹)核对一致,就说明证书在正常使用。 - 命令行验证:执行
curl -vk https://localhost:443命令,输出日志中会包含Server certificate段落,打印当前服务返回的证书详情,能正常展示你生成的证书信息即为生效,参数-k的作用是允许curl接受未被信任的自签名证书。 - 代码逻辑验证:你可以在Express路由中通过
req.protocol获取当前请求的协议,HTTPS服务下该值固定为https,也可以通过req.socket.getPeerCertificate()方法获取当前连接的证书对象,和你生成的证书属性核对即可。
内容的提问来源于stack exchange,提问作者Cristian
相关产品推荐
相关产品推荐

