如何在Node.js+Express.js应用中创建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

