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

如何在Node.js+Express.js应用中创建HTTPS服务器及获取密钥证书

解决Node.js/Express HTTPS服务器的证书获取问题

别担心,作为Node.js新手,搞懂HTTPS证书确实需要一点步骤,我来帮你分两种场景说明怎么拿到privatekey.pem和certificate.pem:

一、开发环境:生成自签名证书

开发阶段不需要第三方可信机构的证书,用OpenSSL生成自签名证书就足够了(大部分操作系统默认自带OpenSSL)。

步骤1:生成私钥(privatekey.pem)

打开终端,运行以下命令:

openssl genrsa -out privatekey.pem 2048

这个命令会生成一个2048位的RSA私钥,保存为privatekey.pem。

步骤2:生成证书签名请求(CSR)

接下来生成证书签名请求文件,运行:

openssl req -new -key privatekey.pem -out csr.pem

运行后会提示你输入一些信息(比如国家、组织名称等),开发环境下可以随便填,直接按回车跳过也没问题。

步骤3:生成自签名证书(certificate.pem)

最后用私钥和CSR生成自签名证书:

openssl x509 -req -days 365 -in csr.pem -signkey privatekey.pem -out certificate.pem

这个证书有效期是365天,到期后重新生成就行。

现在你就有了privatekey.pem和certificate.pem,可以在Express里这样配置HTTPS服务器:

const fs = require('fs');
const https = require('https');
const express = require('express');
const app = express();

// 读取证书文件
const privateKey = fs.readFileSync('privatekey.pem', 'utf8');
const certificate = fs.readFileSync('certificate.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate };

// 创建HTTPS服务器
const httpsServer = https.createServer(credentials, app);

// 测试路由
app.get('/', (req, res) => {
  res.send('Hello HTTPS!');
});

httpsServer.listen(443, () => {
  console.log('HTTPS server running on port 443');
});

注意:开发环境用自签名证书,浏览器会提示“不安全”,这是正常的,直接忽略警告继续访问就行。

二、生产环境:获取可信CA证书

如果是上线的生产服务器,必须用受浏览器信任的证书,推荐用免费的Let's Encrypt证书,步骤如下:

步骤1:安装Certbot

Certbot是Let's Encrypt官方推荐的工具,能自动生成和续期证书。根据你的操作系统安装,比如Ubuntu可以运行:

sudo apt update
sudo apt install certbot

步骤2:获取证书

运行以下命令(替换成你的实际域名):

sudo certbot certonly --standalone -d yourdomain.com -d www.yourdomain.com

Certbot会自动验证域名所有权,成功后会把证书文件存放在/etc/letsencrypt/live/yourdomain.com/目录下:

  • 私钥文件:privkey.pem
  • 证书文件:fullchain.pem

步骤3:在Express中使用

把这些文件路径配置到你的代码里:

const privateKey = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/privkey.pem', 'utf8');
const certificate = fs.readFileSync('/etc/letsencrypt/live/yourdomain.com/fullchain.pem', 'utf8');
const credentials = { key: privateKey, cert: certificate };

// 后续创建服务器的代码和开发环境一致

注意:生产环境要确保服务器的443端口对外开放,并且域名已经正确解析到你的服务器IP。

内容的提问来源于stack exchange,提问作者suresh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:58:27