Node.js应用访问Azure Key Vault因自签名CA证书报错如何解决
Node.js使用@azure/identity访问Azure Key Vault自签名证书问题解决方案
FetchError: request to https://mytestkv.azure.net/secrets/mypassword/?api-version=7.2 failed, reason: unable to verify the first certificate
该报错由公司防火墙替换HTTPS证书链、Node.js运行时不信任自签名CA根证书导致,以下是不同场景的解决方案:
方案1:本地开发临时禁用全局SSL校验(禁止用于生产环境)
直接通过环境变量关闭Node.js全局的TLS证书校验,适合快速测试用:
- Mac/Linux启动命令:
NODE_TLS_REJECT_UNAUTHORIZED=0 node your-app.js - Windows CMD启动命令:
set NODE_TLS_REJECT_UNAUTHORIZED=0 && node your-app.js - Windows PowerShell启动命令:
$env:NODE_TLS_REJECT_UNAUTHORIZED=0; node your-app.js
注意:该方案会关闭所有Node请求的证书校验,风险较高,仅推荐临时测试使用
方案2:添加公司自签名CA到Node信任链(推荐本地开发使用)
该方案不需要关闭全局校验,安全性更高:
- 导出公司自签名根CA证书,保存为PEM格式
- 启动应用时指定额外信任的CA证书路径:
NODE_EXTRA_CA_CERTS=./your-company-root-ca.pem node your-app.js
方案3:仅针对Azure SDK请求关闭证书校验
如果不想修改全局配置,可单独给Azure SDK配置允许不安全连接:
- 安装依赖:
npm install @azure/core-rest-pipeline - 代码示例:
const { DefaultAzureCredential } = require("@azure/identity"); const { SecretClient } = require("@azure/keyvault-secrets"); const { createDefaultHttpClient } = require("@azure/core-rest-pipeline"); // 创建允许不安全连接的HTTP客户端 const httpClient = createDefaultHttpClient({ allowInsecureConnection: true }); // 给身份验证凭证传入自定义HTTP客户端 const credential = new DefaultAzureCredential({ httpClient }); // 初始化Key Vault客户端时传入相同配置 const client = new SecretClient("https://mytestkv.vault.azure.net/", credential, { httpClient });
注意事项
- 所有涉及关闭证书校验的配置仅可用于本地开发环境,禁止在生产环境使用,否则会存在中间人攻击风险
- 应用部署到Azure后无需保留上述配置,Azure原生环境的证书链受公共信任,可直接正常访问密钥保管库
内容的提问来源于stack exchange,提问作者user3616544
相关产品推荐
相关产品推荐

