Node.js执行node .命令时遇UNABLE_TO_GET_ISSUER_CERT_LOCALLY错误求助
解决Node.js中"UNABLE_TO_GET_ISSUER_CERT_LOCALLY"错误(Discord.js场景)
问题重现
运行node .时触发以下错误:
node:internal/process/promises:289 triggerUncaughtException(err, true /* fromPromise */); ^ Error: unable to get local issuer certificate at TLSSocket.onConnectSecure (node:_tls_wrap:1674:34) at TLSSocket.emit (node:events:518:28) at TLSSocket._finishInit (node:_tls_wrap:1085:8) at ssl.onhandshakedone (node:_tls_wrap:871:12) { code: 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY' }
环境版本:NPM v10.4.0 | Node v20.11.0 | Discord.js v14.14.1
可行解决方案
1. 开发环境临时绕过验证(应急用)
仅适合本地开发调试,生产环境绝对禁止:
- 命令行临时设置环境变量:
# Linux/macOS NODE_TLS_REJECT_UNAUTHORIZED=0 node . # Windows CMD set NODE_TLS_REJECT_UNAUTHORIZED=0 && node . - 代码中全局设置(入口文件最顶部添加):
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
2. 配置可信根证书(推荐生产/长期解决)
这个错误本质是Node无法找到验证SSL连接的可信CA证书,可通过以下方式修复:
- 下载Mozilla官方根证书包,保存为
root-ca.pem,然后指定环境变量:# Linux/macOS export NODE_EXTRA_CA_CERTS="/绝对路径/root-ca.pem" node . # Windows CMD set NODE_EXTRA_CA_CERTS="C:\绝对路径\root-ca.pem" node . - 或者通过npm全局配置证书:
npm config set cafile "/绝对路径/root-ca.pem"
3. 针对Discord.js的请求配置调整
修改Discord.js的REST客户端代理设置,强制指定证书验证规则:
const { Client, GatewayIntentBits, REST } = require('discord.js'); const https = require('https'); // 开发环境用这个,生产环境替换为正确的agent配置 const sslAgent = new https.Agent({ rejectUnauthorized: false }); // 初始化REST客户端时绑定agent const rest = new REST({ version: '10' }) .setToken('你的Bot令牌') .setAgent(sslAgent); // 创建Client时传入rest配置 const client = new Client({ intents: [GatewayIntentBits.Guilds], rest: { agent: sslAgent } });
注意事项
- 生产环境必须使用可信CA证书,禁用证书验证会导致中间人攻击风险;
- 如果是公司内网环境,可能需要配置内网CA证书路径。
内容的提问来源于stack exchange,提问作者MichelDev
相关产品推荐
相关产品推荐

