Python中EventHubConsumerClient调用get_token报CERTIFICATE_VERIFY_FAILED如何解决
报错根因
这个报错是因为你的运行环境存在SSL中间人代理(通常是企业内网代理、防火墙流量审计设备),会替换站点的SSL证书为自签证书,Azure SDK默认使用系统根证书库校验,无法识别该自签证书导致校验失败。你手动POST请求可正常获取令牌是因为请求时已经信任了该自签证书或关闭了校验逻辑。
解决方案
方案1:配置自定义根证书(生产环境推荐,符合安全规范)
- 先导出你环境中使用的自签根CA证书,保存为PEM格式文件(例如
internal_root_ca.pem) - 在代码中添加如下环境变量配置,告知Azure SDK使用该证书做校验:
# 配置自定义根证书路径 os.environ["REQUESTS_CA_BUNDLE"] = "/path/to/internal_root_ca.pem" os.environ["SSL_CERT_FILE"] = "/path/to/internal_root_ca.pem"
- 保持
EventHubConsumerClient的ssl_verify参数为True即可,无需关闭校验。
方案2:临时关闭证书校验(仅本地测试使用,生产环境严禁开启)
如果仅用于本地调试不想配置证书,可直接关闭SSL校验逻辑:
- 修改
EventHubConsumerClient的ssl_verify参数为False - 添加如下环境变量关闭Azure身份认证模块的证书校验:
# 关闭身份认证环节的SSL校验 os.environ["AZURE_CLI_DISABLE_CONNECTION_VERIFICATION"] = "1" # 可选:关闭未校验HTTPS请求的警告输出 os.environ["PYTHONWARNINGS"] = "ignore:Unverified HTTPS request"
代码修正说明
你当前贴出的代码存在参数位置错误,http_proxy参数需要放到EventHubConsumerClient的构造参数内部,正确示例如下:
import os from azure.identity import EnvironmentCredential from azure.eventhub import EventHubConsumerClient # 配置身份认证所需环境变量 os.environ["AZURE_TENANT_ID"] = tenantId os.environ["AZURE_CLIENT_ID"] = client_id os.environ["AZURE_CLIENT_SECRET"] = client_secret # 此处添加上面方案里的证书/关闭校验的环境变量配置 credential = EnvironmentCredential() self.client = EventHubConsumerClient( fully_qualified_namespace=fully_qualified_namespace, eventhub_name=eventhub_name, consumer_group=group, credential=credential, http_proxy=self.HTTP_PROXY, ssl_verify=True # 用方案1则保持True,用方案2则改为False )
内容的提问来源于stack exchange,提问作者user15994794
相关产品推荐
相关产品推荐

