Search code examples
python-3.xinfluxdburllib3influxdb-python

SSL certificate expired error for influxdb-client


I have a windows 10 machine, and I am not sure what the problem is, I was able to run everything until a few hours back and now I keep running into SSL certificate Expired error for some reason.

Steps to reproduce: This is my code.

'''
'''
from datetime import datetime
from influxdb_client import InfluxDBClient

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",
}

client = InfluxDBClient(
    url="https://eu-central-1-1.aws.cloud2.influxdata.com",
    org=config['org'],
    bucket=config['bucket'],
    token=config['token'],
    # verify_ssl=False
)
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)

Expected behavior: I expect it to give me a dataframe like it always does and as you can see when I keep the ssl_verify=False it works.

    result table                     _time                    _start                     _stop             _measurement         source symbol       price
0  _result     0 2021-04-07 00:00:00+00:00 2021-04-07 00:00:00+00:00 2021-04-08 00:00:00+00:00  public_instruments_data  YAHOO-FINANCE   TSLA  670.969971

Actual behavior:

Traceback (most recent call last):
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 382, in _make_request
    self._validate_conn(conn)
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 1010, in _validate_conn
    conn.connect()
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connection.py", line 411, in connect
    self.sock = ssl_wrap_socket(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\khans\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "C:\Users\khans\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1040, in _create
    self.do_handshake()
  File "C:\Users\khans\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\rest.py", line 181, in request
    r = self.pool_manager.request(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\request.py", line 78, in request
    return self.request_encode_body(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\request.py", line 170, in request_encode_body
    return self.urlopen(method, url, **extra_kw)
  File "d:\MAIN_ENV\lib\site-packages\urllib3\poolmanager.py", line 375, in urlopen
    response = conn.urlopen(method, u.request_uri, **kw)
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 755, in urlopen
    retries = retries.increment(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\util\retry.py", line 507, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "d:\MAIN_ENV\lib\site-packages\urllib3\packages\six.py", line 769, in reraise
    raise value.with_traceback(tb)
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 699, in urlopen
    httplib_response = self._make_request(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 382, in _make_request
    self._validate_conn(conn)
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connectionpool.py", line 1010, in _validate_conn
    conn.connect()
  File "d:\MAIN_ENV\lib\site-packages\urllib3\connection.py", line 411, in connect
    self.sock = ssl_wrap_socket(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "d:\MAIN_ENV\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\khans\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "C:\Users\khans\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1040, in _create
    self.do_handshake()
  File "C:\Users\khans\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "d:\backend-dev-plaid\test_app_5.py", line 26, in <module>
    results_df = query_api.query_data_frame(
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\client\query_api.py", line 146, in query_data_frame
    _generator = self.query_data_frame_stream(query, org=org, data_frame_index=data_frame_index, params=params)
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\client\query_api.py", line 172, in query_data_frame_stream
    response = self._query_api.post_query(org=org, query=self._create_query(query, self.default_dialect, params),
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\service\query_service.py", line 260, in post_query
    (data) = self.post_query_with_http_info(**kwargs)  # noqa: E501
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\service\query_service.py", line 340, in post_query_with_http_info
    return self.api_client.call_api(
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\api_client.py", line 341, in call_api
    return self.__call_api(resource_path, method,
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\api_client.py", line 171, in __call_api
    response_data = self.request(
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\api_client.py", line 386, in request
    return self.rest_client.POST(url,
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\rest.py", line 302, in POST
    return self.request("POST", url,
  File "d:\MAIN_ENV\lib\site-packages\influxdb_client\rest.py", line 238, in request
    raise ApiException(status=0, reason=msg)
influxdb_client.rest.ApiException: (0)
Reason: SSLError
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1129)

Specifications:

  • Client Version: 1.21.0
  • InfluxDB Version: 2.0
  • Platform: Windows 10 home
  • Python: 3.9.7

I tried reinstalling python and all the libraries again just make sure the problem wasn't at my end and I also followed the urllib3 docs for installing the certificates from certifi and urllib3[secure] as suggested when I keep ssl_verify=False. Any help would be much appreciated, thanks a lot in advance.


Solution

  • Just use ..., ssl_ca_cert=certifi.where(), ... as a temporary solution, but anyways since posting the question it seems the certificates have been already updated.