错误源于node.js tls证书严格校验与本地代理/工具(如steamcommunity302、clash等)注入的自签名证书冲突;首选停用相关代理服务并重启,其次可临时设node_tls_reject_unauthorized=0调试,最终应将代理根证书导入系统信任库。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当你在Node.js项目中调用GitHub Copilot相关API(如通过自建代理服务、Copilot SDK或封装的请求逻辑)时,遇到Error: unable to verify the first certificate,说明Node.js默认启用了TLS证书严格校验,而当前请求链路中出现了不受系统信任的中间证书、自签名证书或被本地代理/工具劫持的HTTPS响应。
确认是否为本地代理或证书拦截工具导致
先排查最常被忽略的根源:你是否正在运行FastGithub、SteamCommunity302、Clash for Windows(启用TUN或TAP模式)、Surge、或任何启用HTTPS解密功能的代理软件?这类工具会注入自签名根证书,并重写HTTPS流量——Node.js不自动信任它们的根证书,因此报错。
打开Windows服务管理器(services.msc)或macOS终端执行launchctl list | grep -i fast,检查FastGithub、dnscrypt-proxy、steamcommunity302等服务是否处于“正在运行”状态。
若存在,立即停止对应服务→重启终端→重试Node.js脚本。这一步能解决超过70%的同类报错。
临时绕过证书验证(仅限开发环境)
方法一:设置Node.js全局环境变量(推荐用于快速验证)
在启动Node.js进程前,执行:NODE_TLS_REJECT_UNAUTHORIZED=0 node your-script.js。该变量会强制Node.js跳过所有TLS证书验证,适用于本地调试。
【注意:绝对不可用于生产环境,会暴露MITM攻击风险】
方法二:在代码中配置https.Agent(精准控制单个请求)
使用原生https模块或axios时,在请求选项中显式传入不校验证书的Agent:
const https = require('https'); const agent = new https.Agent({ rejectUnauthorized: false }); // axios示例:axios.get('https://copilot-proxy.githubusercontent.com/_ping', { httpsAgent: agent });
永久修复:将代理工具的根证书导入系统信任库
第一步:定位代理工具生成的根证书文件
FastGithub默认证书路径为%LOCALAPPDATA%\FastGithub\cert\ca.crt;Clash for Windows在「配置」→「HTTPS 解密」中可导出证书;SteamCommunity302证书通常位于C:\Program Files\SteamCommunity302\cert\rootCA.crt。
第二步:将证书导入操作系统信任根证书存储区
Windows:双击.crt文件→选择“安装证书”→“本地计算机”→“受信任的根证书颁发机构”→完成向导。
macOS:双击证书→在钥匙串访问中打开→右键证书→“显示简介”→展开“信任”→“当使用此证书时”选“始终信任”→输入密码保存更改。
第三步:重启Node.js进程并验证
执行curl --verbose https://copilot-proxy.githubusercontent.com/_ping,确认返回HTTP 200且无证书警告;再运行你的Node.js脚本,错误应消失。











