关键词

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate

InfluxDB

Python

问题描述

编写了一个python脚本用于向InfluxDB Cloud存入数据。

………………
    with InfluxDBClient(url="https://ap-southeast-2-1.aws.cloud2.influxdata.com", token=dbTOKEN, org=org) as client:
        write_api = client.write_api(write_options=SYNCHRONOUS)

        write_api.write(bucket, org, data)

在本地运行时没有问题,然而在服务器上运行时出现错误。

服务器上运行时产生错误:

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)

问题分析

从字面上看,即为”无法获取本地颁发者证书“。

然而,经过检查(使用如下代码),本地证书存在。

>>> import certifi
>>> certifi.where()

'/usr/local/lib/python3.8/dist-packages/certifi/cacert.pem'

尝试使用pip install --upgrade certifi ,无法解决问题。

尝试从https://curl.se/ca/cacert.pem下载最新证书并替换,无法解决问题。

解决方法

来源:

https://stackoverflow.com/questions/69401104/influxdb-2-0-certificate-verify-failed-certificate-has-expired-ssl-c1129

尽管非同一报错,但尝试后问题解决。

在代码中进行如下修改(为client引入ssl_ca_cert参数):


………………
import certifi

    with InfluxDBClient(url="https://ap-southeast-2-1.aws.cloud2.influxdata.com", token=dbTOKEN, org=org , ssl_ca_cert=certifi.where() ) as client:
        write_api = client.write_api(write_options=SYNCHRONOUS)

        write_api.write(bucket, org, data)

再次运行脚本,得到预期结果。


I am a noob