如何在Windows Server 2012的IIS和Node.js中使用同一份SSL证书
Node.js 复用 IIS 现有 GoDaddy SSL 证书配置 HTTPS 方案
你之前操作导致IIS证书失效的核心原因是重新生成CSR并签发新证书会替换原有证书的绑定关联,正确方案无需重新申请证书,直接复用IIS已部署的有效证书即可,完全不会影响IIS现有服务。
方案1:直接给Node.js配置HTTPS服务
步骤1:从IIS导出现有SSL证书(.pfx格式)
- 打开Windows Server运行窗口,输入
inetmgr启动IIS管理器 - 左侧导航栏选中服务器根节点,在中间功能视图双击打开「服务器证书」
- 找到正在使用的GoDaddy有效证书,右键选择「导出」
- 设置pfx文件的本地保存路径,自定义设置一个保护密码,确认导出完成
步骤2:转换pfx证书为Node.js可识别的格式
使用OpenSSL执行以下两条命令:
- 导出私钥文件
openssl pkcs12 -in 导出的pfx文件路径.pfx -nocerts -out private.key -nodes
执行时输入之前导出pfx时设置的保护密码即可 - 导出公钥证书文件
openssl pkcs12 -in 导出的pfx文件路径.pfx -nokeys -out certificate.crt
步骤3:在Node.js项目中引入HTTPS配置
以Express框架为例,代码参考:
const https = require('https'); const fs = require('fs'); const express = require('express'); const app = express(); // 加载证书和私钥 const sslOptions = { key: fs.readFileSync('private.key的本地绝对路径'), cert: fs.readFileSync('certificate.crt的本地绝对路径') }; // 原有业务逻辑无需改动 app.get('/', (req, res) => { res.send('HTTPS服务正常'); }); // 启动HTTPS服务,注意端口不要和IIS的443端口冲突 https.createServer(sslOptions, app).listen(3000, () => { console.log('Node.js HTTPS服务已启动,端口3000'); });
步骤4:PM2重启应用生效
修改完代码后执行pm2 restart 你的Node应用名称即可。
方案2:IIS反向代理(更推荐,无需单独维护Node端证书)
如果需要Node应用也使用443端口,可通过IIS反向代理实现SSL统一管理,无需修改Node项目配置:
- 给需要绑定Node应用的域名在IIS上配置已有的GoDaddy SSL证书
- 安装ARR和路由转发功能,将该域名的所有请求转发到Node应用的本地HTTP服务端口(比如127.0.0.1:3000)
- 后续证书更新仅需在IIS操作一次,Node端无需任何改动
内容的提问来源于stack exchange,提问作者Step
相关产品推荐
相关产品推荐

