You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:09