企业防火墙后使用VSCode中AZCLI遇SSL证书验证失败求助
在企业防火墙环境下使用VSCode中的AZCLI时,收到以下SSL证书验证失败错误:
cli.azure.cli.core.azclierror: HTTPSConnectionPool(host='login.microsoftonline.com', port=443): Max retries exceeded with url: /organizations/v2.0/.well-known/openid-configuration (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')))
az_command_data_logger:
HTTPSConnectionPool(host='login.microsoftonline.com', port=443): Max
retries exceeded with url:
/organizations/v2.0/.well-known/openid-configuration (Caused by
SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed: self signed certificate in certificate
chain (_ssl.c:997)')))
Certificate verification failed. This typically happens when using
Azure CLI behind a proxy that intercepts traffic with a self-signed
certificate. Please add this certificate to the trusted CA bundle.
cli.knack.cli: Event: Cli.PostExecute [<function AzCliLogging.deinit_cmd_metadata_logging at 0x0402A460>]
当前问题:
- 无法确定需要提取哪个防火墙证书添加到信任包
- 已将MMC中的部分根证书追加到
C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem,但无效 - 已设置环境变量
AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1和ADAL_PYTHON_SSL_NO_VERIFY=1,问题依旧 - 疑问:
REQUEST_CA_BUNDLE环境变量是否能解决该问题
1. 准确获取防火墙拦截的证书
你需要的是企业防火墙用于拦截HTTPS流量的自签名根CA证书,可通过两种方式获取:
- 浏览器导出法:
- 打开浏览器访问
login.microsoftonline.com - 点击地址栏左侧锁形图标 → 「证书」→ 「证书路径」
- 找到最顶层的企业自签名根证书(通常是公司内部CA),点击「查看证书」
- 切换到「详细信息」标签 → 「复制到文件」,选择「Base64编码的X.509(.CER)」格式导出
- 打开导出的CER文件,复制从
-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----的全部内容,追加到cacert.pem文件末尾
- 打开浏览器访问
- OpenSSL命令法:
在终端执行以下命令,找到输出中标记为Self-signed的最后一个证书块,复制对应内容追加到cacert.pem:openssl s_client -connect login.microsoftonline.com:443 -showcerts
2. 用REQUEST_CA_BUNDLE指定信任证书
这个环境变量可以解决你的问题,它会让Azure CLI优先使用你指定的CA证书包,替代默认的certifi证书库:
- 设置命令:
如果你单独保存了企业根证书,也可以直接指向该证书文件路径setx REQUEST_CA_BUNDLE "C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem"
3. 确保环境变量生效
- 设置完成后,必须关闭并重新打开VSCode,让终端加载新的环境变量
- 在VSCode终端中执行
echo %REQUEST_CA_BUNDLE%,确认路径输出正确
4. 排查现有环境变量问题
AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1理论上可以跳过SSL验证,若未生效,大概率是VSCode未读取到新设置的环境变量,重启VSCode或终端即可ADAL_PYTHON_SSL_NO_VERIFY=1针对旧版Azure AD认证库(ADAL),新版Azure CLI使用MSAL库,该变量对你的情况无效,可忽略
内容的提问来源于stack exchange,提问作者R4maz

