本文介绍如何在Linux系统下的Node.js服务器配置SSL证书,具体包括下载和上传证书文件的方法,以及安装证书后效果的验证。
前提条件
操作步骤
步骤一:下载 SSL 证书和私钥文件
步骤二:安装 SSL 证书到 Node.js
登录 Linux 服务器。
阿里云服务器:请参考使用Workbench登录Linux实例。
非阿里云服务器:请通过对应厂商提供的远程连接功能登录服务器终端。
后续部分命令因操作系统类型不同而略有差异。请根据实际的服务器操作系统,选择对应的命令操作。
RHEL/CentOS 系列:包括 Alibaba Cloud Linux、Red Hat Enterprise Linux、CentOS、AlmaLinux、Rocky Linux、Anolis OS 及其衍生版本。
Debian/Ubuntu 系列:包括 Debian、Ubuntu 及其衍生版本。
开放安全组和防火墙的 443 端口。
在服务器终端执行以下命令,检测443端口的开放情况:
RHEL/CentOS
command -v nc > /dev/null 2>&1 || sudo yum install -y nc # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443如果输出
Ncat: Connected to <当前服务器公网 IP>:443,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。Debian/Ubuntu
command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443若输出
Connection to <当前服务器公网 IP> port [tcp/https] succeeded!或[<当前服务器公网 IP>] 443 (https) open,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。在安全组配置开放443端口。
请确保安全组已开放 443 端口 (TCP),否则外部无法访问服务。以下操作以阿里云 ECS 为例:
在防火墙中开放443端口。
执行以下命令,识别系统当前的防火墙服务类型:
if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then echo "firewalld" elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then echo "ufw" elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then echo "nftables" elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then echo "iptables" elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then echo "iptables" else echo "none" fi若输出为
none,则无需进一步操作。否则,请根据输出的类型(firewalld、ufw、nftables、iptables),执行以下命令开放 443 端口:firewalld
sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reloadufw
sudo ufw allow 443/tcpnftables
sudo nft add table inet filter 2>/dev/null sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/nulliptables
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT为避免 iptables 规则在系统重启后失效,请执行以下命令持久化 iptables 规则:
RHEL/CentOS
sudo yum install -y iptables-services sudo service iptables saveDebian/Ubuntu
sudo apt-get install -y iptables-persistent sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
上传 SSL 证书和私钥文件到服务器的目标目录。
重要本文以
ssl.pem(证书文件)和ssl.key(私钥文件)为例,将其上传至服务器的 /etc/ssl/cert 目录。若该目录不存在,可执行sudo mkdir -p /etc/ssl/cert进行创建。阿里云服务器
以下操作以阿里云云服务器 ECS 为例进行说明,其他类型的服务器请参照对应产品文档进行操作。
在前面步骤打开的 Workbench 页面中,选择顶部菜单栏的文件 > 打开新文件树。
在左侧文件树中,右键点击存放证书文件的目标目录(/etc/ssl/cert),选择上传文件,选择并上传证书文件
ssl.pem。重复上述操作,再次右键点击目标目录(
/etc/ssl/cert),选择上传文件,选择并上传私钥文件ssl.key。上传完成后,证书文件路径为
/etc/ssl/cert/ssl.pem,私钥文件路径为/etc/ssl/cert/ssl.key。
其他云厂商服务器
请通过对应云厂商提供的文件上传功能,将证书和私钥文件上传到服务器的目标目录(
/etc/ssl/cert)。非云厂商服务器(如物理服务器、IDC 托管主机等)
在本地使用 SSH 工具上传证书文件和私钥文件。以下示例中,
<username>为当前服务器的用户名,<server_ip>为当前服务器的公网 IP。Windows
使用系统自带的命令提示符(cmd)或 PowerShell,通过
scp命令上传文件。以证书文件和私钥文件存在本地C:\目录为例。# 上传本地证书文件到服务器,请将路径 C:\ssl.pem 和 /etc/ssl/cert 替换为实际的源文件和目标目录 scp C:\ssl.pem <username>@<server_ip>:/etc/ssl/cert # 上传本地私钥文件到服务器,请将路径 C:\ssl.pem 和 /etc/ssl/cert 替换为实际的源文件和目标目录 scp C:\ssl.key <username>@<server_ip>:/etc/ssl/cert若系统未集成 scp 命令,可以使用开源免费的 PuTTY 客户端,并配合其附带的 pscp.exe 工具通过命令行上传文件。也可以使用图形化的 WinSCP 上传文件。
Linux/macOS
使用系统自带的终端,执行
scp命令上传文件。以证书文件和私钥文件存在本地/tmp目录为例。# 上传本地证书文件到服务器,请将路径 /tmp/ssl.pem 和 /etc/ssl/cert 替换为实际的源文件和目标目录 scp /tmp/ssl.pem <username>@<server_ip>:/etc/ssl/cert # 上传本地私钥文件到服务器,请将路径 /tmp/ssl.pem 和 /etc/ssl/cert 替换为实际的源文件和目标目录 scp /tmp/ssl.key <username>@<server_ip>:/etc/ssl/cert执行以下命令,前往工作目录,如
/home,新建https_server_test.js项目文件。# /home目录仅用于示例,配置时请修改为实际工作目录。 cd /home # 新建测试项目文件,配置时请修改为实际的项目文件。 sudo touch https_server_test.js执行以下命令,修改https_server_test.js文件。
vim https_server_test.js按i键进入编辑模式,并将以下内容添加至https_server_test.js文件中。内容如下所示:
// 启动https服务需要https包 // 读取文件需要fs包 const https = require('https'); const fs = require('fs'); // 将两个证书文件读取放到options对象中 // 使用readFileSync()方法,顺序地执行读文件和启动服务操作 const options = { key: fs.readFileSync('/etc/ssl/cert/ssl.key'), // 需替换为实际上传私钥文件的绝对路径。 cert: fs.readFileSync('/etc/ssl/cert/ssl.pem') // 需替换为实际上传SSL证书文件的绝对路径。 }; // 创建服务器,启动服务器,设置监听端口号 https.createServer(options, (req, res) => { res.end('hello world\n'); }).listen(443);重要证书文件的路径需要配置正确,否则证书配置失败,无法使用HTTPS访问。
添加完成后,按
Esc键退出编辑模式,并输入:wq后按Enter键,保存并退出文件。执行以下命令,使SSL证书生效。
sudo node https_server_test.js
步骤三:验证 SSL证书是否安装成功
请通过 HTTPS 访问您已绑定证书的域名(如
https://example.com,example.com需替换为实际域名)。若浏览器地址栏显示安全锁图标,说明证书已成功部署。如访问异常或未显示安全锁,请先清除浏览器缓存或使用无痕(隐私)模式重试。

Chrome 浏览器自 117 版本起,地址栏中的
已被新的
替代,需单击该图标后查看安全锁信息。
如仍有问题,请参考常见问题进行排查。
后续步骤(可选)
开启域名监控
建议在证书部署完成后,为域名开启域名监控功能。系统将自动检测证书有效期,并在到期前发送提醒,帮助您及时续期,避免服务中断。具体操作请参见购买并开启公网域名监控。
常见问题
安装或更新证书后,证书未生效或 HTTPS 无法访问
常见原因如下:
域名未完成备案。请参见如何查看域名解析记录以及 ICP 备案信息。
服务器安全组或防火墙未开放 443 端口。请参见开放安全组和防火墙的 443 端口。
证书的绑定域名未包含当前访问的域名。请参见操作步骤。
修改项目文件后,未重启Node.js服务。具体操作可参见重启Node.js服务。
证书文件未正确替换,或 Node.js 配置未正确指定证书路径。请检查证书文件是否为最新且有效。
域名已接入 CDN、SLB 或 WAF 等云产品,但未在相应产品中安装证书。请参阅流量经过多个云产品时证书的部署位置完成相关操作。
当前域名的 DNS 解析指向多台服务器,但证书仅在部分服务器上安装。需分别在每个服务器中安装证书。
如需进一步排查,请参考:根据浏览器错误提示解决证书部署问题 和 SSL证书部署故障自助排查指南。
如何更新(替换)Node.js 中已安装的 SSL 证书
请先备份服务器上原有的证书文件(.pem 和 .key),然后登录数字证书管理服务控制台,下载新的证书文件(.pem 和 .key),并上传到目标服务器覆盖原有文件(确保路径和文件名一致)。最后,重启Node.js服务,使新证书生效。