You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Axios结合Umbrella PAC代理使用SSL证书?

Axios通过Umbrella PAC代理访问API的证书问题排查与解决

核心原因

Axios基于Node.js运行时,默认只会读取Node.js内置的CA证书列表,不会自动加载Windows系统证书存储里的证书,这就是你导入证书到Windows CA后仍无效的根本原因。

具体排查方向

1. 确认证书链完整性与格式

  • 检查导入的Umbrella证书链是否包含根CA、中间CA和服务器证书,必须是完整的链式结构
  • 确保证书格式为PEM格式(.pem或.crt),Node.js不直接支持PFX格式,若有PFX需先转换:
    openssl pkcs12 -in umbrella.pfx -out umbrella.crt -nokeys
    openssl pkcs12 -in umbrella.pfx -out umbrella.key -nodes -nocerts
    

2. 验证Axios的证书配置是否正确

直接在Axios请求中指定CA证书链,或者配置环境变量让Node.js加载自定义CA:

  • 方法一:请求级配置
    const axios = require('axios');
    const https = require('https');
    const fs = require('fs');
    
    const httpsAgent = new https.Agent({
      ca: fs.readFileSync('/path/to/umbrella-full-chain.pem'),
      // 若代理需要客户端证书,需同时指定cert和key
      // cert: fs.readFileSync('/path/to/client-cert.pem'),
      // key: fs.readFileSync('/path/to/client-key.pem')
    });
    
    axios.get('https://target-api.com', {
      httpsAgent: httpsAgent,
      proxy: {
        host: 'umbrella-proxy-host',
        port: 8080 // 或PAC解析出的代理端口
      }
    });
    
  • 方法二:全局环境变量配置(适用于所有Node.js应用)
    # Windows命令行
    set NODE_EXTRA_CA_CERTS=C:\path\to\umbrella-full-chain.pem
    
    # PowerShell
    $env:NODE_EXTRA_CA_CERTS="C:\path\to\umbrella-full-chain.pem"
    

3. 排查PAC代理的证书拦截

Umbrella PAC代理可能会对HTTPS请求做SSL拦截,替换目标服务器证书,此时需要确保你导入的是Umbrella拦截用的CA证书,而非目标API的原始证书链。可以通过浏览器访问目标API,查看证书详情,确认实际返回的证书 issuer 是Umbrella的CA,再导出该CA证书用于Axios配置。

4. 检查代理配置是否正确解析PAC脚本

Axios本身不支持直接解析PAC脚本,需要先通过工具(如pac-proxy-agent)解析PAC获取实际代理地址:

const axios = require('axios');
const { PacProxyAgent } = require('pac-proxy-agent');
const fs = require('fs');

const agent = new PacProxyAgent('http://umbrella-pac-url.pac', {
  ca: fs.readFileSync('/path/to/umbrella-full-chain.pem')
});

axios.get('https://target-api.com', {
  httpAgent: agent,
  httpsAgent: agent
});

5. 验证证书有效性

使用openssl命令测试证书链是否能正常验证目标API:

openssl s_client -connect target-api.com:443 -CAfile /path/to/umbrella-full-chain.pem

如果命令返回Verify return code: 0 (ok),说明证书链有效,问题出在Axios/Node.js的配置上;若返回错误,需重新检查证书链。

如何使用Windows证书存储?

Node.js运行时设计上与系统证书库隔离,需借助第三方库(如win-ca)来加载Windows系统CA证书:

const axios = require('axios');
const https = require('https');
const winCA = require('win-ca');

const httpsAgent = new https.Agent({
  ca: winCA.all() // 加载所有Windows系统CA证书
});

axios.get('https://target-api.com', {
  httpsAgent: httpsAgent,
  proxy: { /* 代理配置 */ }
});

注意:使用win-ca会加载系统中所有CA证书,可能带来安全风险,建议仅加载所需的Umbrella CA证书。

内容的提问来源于stack exchange,提问作者Zonderziel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:49:54