Let's Encrypt根证书过期致Heroku上Node 8.9.0应用无法调用API求临时方案
临时修复方案(无需升级Node.js版本)
- 方案1:配置Node使用系统根证书存储(零代码改动,优先推荐)
Node 8.x默认使用内置的旧根证书列表,包含已过期的DST Root CA X3,你可以直接在Heroku后台的配置变量页新增环境变量:
配置完成后重启dyno即可生效,Heroku底层系统的根证书存储已经更新了有效的ISRG Root X1根证书,Node会直接调用系统层的证书校验逻辑,不会再触发过期错误。NODE_OPTIONS=--use-openssl-ca - 方案2:手动指定信任ISRG Root X1根证书
你可以将公开的ISRG Root X1根证书PEM文件放到你的项目根目录,在应用入口文件最开头添加以下代码,全局覆盖HTTPS请求的默认信任证书:
如果你只针对特定请求修改,也可以单独给对应请求的配置传入const fs = require('fs'); const https = require('https'); https.globalAgent.options.ca = fs.readFileSync(`${__dirname}/isrgrootx1.pem`);ca参数即可。 - 方案3:临时关闭TLS证书校验(仅应急使用,风险较高)
如果你需要最快速度恢复业务,可以针对确认安全的目标API域名,在请求配置中添加rejectUnauthorized: false参数;如果需要全局生效,可在入口文件最开头添加:
注意该方案会忽略所有TLS证书校验,存在中间人攻击风险,仅适合临时应急,完成版本升级后必须立即移除。process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
注意:以上方案均为临时过渡方案,Node 8.x早已停止官方安全维护,建议你尽快排期完成Node版本升级到官方支持的LTS版本,从根本上解决根证书更新、安全漏洞等各类问题。
内容的提问来源于stack exchange,提问作者Ashwin Suryavanshi
相关产品推荐
相关产品推荐

