Windows10下influxdb-client连接时报SSL证书过期错误如何解决?
解决方案
方案1:升级certifi根证书包
Python默认使用certifi提供的根证书集合,旧版本certifi可能未移除已过期的DST Root CA X3证书,执行以下命令升级即可:
pip install --upgrade certifi
升级完成后重新运行代码测试是否恢复正常。
方案2:调用Windows系统根证书验证
如果升级certifi无效,可以直接使用Windows系统自带的根证书库进行验证,Windows系统的根证书会通过系统更新自动维护:
- 先安装依赖库:
pip install wincertstore
- 修改你的InfluxDB客户端初始化代码,指定使用系统证书:
from datetime import datetime from influxdb_client import InfluxDBClient import wincertstore config = { 'start': datetime.date(datetime(2021, 4, 7)), 'stop': datetime.date(datetime(2021, 4, 10)), 'bucket': "hidden", 'org': "hidden", 'url': "hidden", 'token': "hidden", 'measurement-name': "hidden", } # 加载Windows系统根证书 with wincertstore.CertFile() as certfile: certfile.addstore("CA") certfile.addstore("ROOT") client = InfluxDBClient( url="https://eu-central-1-1.aws.cloud2.influxdata.com", org=config['org'], bucket=config['bucket'], token=config['token'], verify=certfile.name ) # 后续查询逻辑保持不变 query_api = client.query_api() ticker = 'TSLA' results_df = query_api.query_data_frame( f'from(bucket:"{config["bucket"]}")' f'|> range(start: {config["start"]}, stop: {config["stop"]}) ' '|> filter(fn: (r) =>' f' r._measurement == "{config["measurement-name"]}"' f' and r.symbol == "{ticker}"' ') ' '|> filter (fn: (r) =>' ' r._field == "price"' ') ' '|> pivot(' ' rowKey:["_time"],' ' columnKey: ["_field"],' ' valueColumn: "_value"' ') ' '|> sort(columns: ["_time"], desc: false) ' ) print(results_df)
方案3:更新Windows系统根证书
打开Windows设置→更新和安全→Windows更新,检查并安装所有待更新的补丁,尤其是根证书更新相关的可选更新,完成后重启设备再运行代码测试。
注意
你当前使用的verify_ssl=False属于临时 workaround,会跳过SSL证书验证存在安全风险,生产环境禁止使用。
内容的提问来源于stack exchange,提问作者SAK
相关产品推荐
相关产品推荐

