使用Axios连接服务器时遇unable to get issuer certificate错误(已配置自定义CA)
解决Axios
unable to get issuer certificate 错误(已配置自定义CA) 1. 检查自定义CA的完整性
要确保你提供的CA文件包含完整的证书链,不能只放根CA。很多服务器证书是由中间CA签发的,只提供根CA的话,Axios无法完成完整的信任链验证。
- 用
openssl s_client -connect your-server:port命令查看服务器的证书链,对比你手中的CA文件,确认链内所有证书都已包含。 - 如果缺少中间CA,将中间CA与根CA合并到同一个PEM文件即可(顺序不影响,Axios会自动识别)。
2. 确认Axios的CA配置是否正确
不同环境下Axios配置CA的方式存在差异,以下是常见场景的正确操作:
浏览器端Axios
浏览器环境下的Axios无法直接指定CA,需先让浏览器信任你的自定义CA:
- 打开浏览器证书管理页面,导入自定义CA并设置为「信任该证书颁发机构」。
Node.js端Axios
Node.js环境下必须通过httpsAgent配置CA,示例代码如下:
const axios = require('axios'); const https = require('https'); const fs = require('fs'); // 读取自定义CA文件 const ca = fs.readFileSync('/path/to/your/custom-ca.pem'); const httpsAgent = new https.Agent({ ca: ca, // 默认值为true,无需修改,确保服务器主机名验证开启 rejectUnauthorized: true }); axios.get('https://your-server-url', { httpsAgent }) .then(res => console.log(res.data)) .catch(err => console.error(err));
如果你的CA是DER格式,需先转为PEM:openssl x509 -inform der -in custom-ca.cer -out custom-ca.pem
3. 排查Node.js的CA存储干扰
Node.js可能优先使用系统内置CA,或NODE_EXTRA_CA_CERTS环境变量会影响配置:
- 若设置了
NODE_EXTRA_CA_CERTS,要么确保该变量指向的文件包含你的自定义CA,要么暂时取消该变量后重试。 - 可通过
process.env.NODE_EXTRA_CA_CERTS查看当前是否设置了该变量。
4. 验证服务器证书本身的有效性
检查服务器证书的有效期与域名匹配度:
- 用
openssl x509 -in server-cert.pem -text -noout查看证书的Validity(有效期)和Subject Alternative Name(域名)字段,确保证书未过期且域名与你访问的地址一致。
5. 临时排查测试(仅用于定位问题,生产环境禁用)
若前面步骤均无效,可临时关闭证书验证(绝对不能用于生产环境),确认是否为CA配置问题:
const httpsAgent = new https.Agent({ rejectUnauthorized: false });
如果关闭后请求成功,说明问题确实出在CA验证环节,返回前面的步骤重新排查。
内容的提问来源于stack exchange,提问作者Dmitri R117
相关产品推荐
相关产品推荐

