«SSL: CERTIFICATE_VERIFY_FAILED» Ошибка при публикации MQTT, AWS IoT

Я получаю следующую ошибку:

[ERROR] SSLError: SSL validation failed for https://data.iot.ap-northeast-2.amazonaws.com/topics/app%2Ftest%2Fresponse?qos=1 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1124)
Traceback (most recent call last):
  File "/var/task/app.py", line 197, in lambda_handler
    mqttcli.test('test', '11111', {}, 1, 200)
  File "/opt/python/lib/python3.8/site-packages/connectors/MQTTClient.py", line 40, in test
    response = self._iot_client.publish(
  File "/var/task/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/task/botocore/client.py", line 662, in _make_api_call
    http, parsed_response = self._make_request(
  File "/var/task/botocore/client.py", line 682, in _make_request
    return self._endpoint.make_request(operation_model, request_dict)
  File "/var/task/botocore/endpoint.py", line 102, in make_request
    return self._send_request(request_dict, operation_model)
  File "/var/task/botocore/endpoint.py", line 136, in _send_request
    while self._needs_retry(attempts, operation_model, request_dict,
  File "/var/task/botocore/endpoint.py", line 253, in _needs_retry
    responses = self._event_emitter.emit(
  File "/var/task/botocore/hooks.py", line 356, in emit
    return self._emitter.emit(aliased_event_name, **kwargs)
  File "/var/task/botocore/hooks.py", line 228, in emit
    return self._emit(event_name, kwargs)
  File "/var/task/botocore/hooks.py", line 211, in _emit
    response = handler(**kwargs)
  File "/var/task/botocore/retryhandler.py", line 183, in __call__
    if self._checker(attempts, response, caught_exception):
  File "/var/task/botocore/retryhandler.py", line 250, in __call__
    should_retry = self._should_retry(attempt_number, response,
  File "/var/task/botocore/retryhandler.py", line 277, in _should_retry
    return self._checker(attempt_number, response, caught_exception)
  File "/var/task/botocore/retryhandler.py", line 316, in __call__
    checker_response = checker(attempt_number, response,
  File "/var/task/botocore/retryhandler.py", line 222, in __call__
    return self._check_caught_exception(
  File "/var/task/botocore/retryhandler.py", line 359, in _check_caught_exception
    raise caught_exception
  File "/var/task/botocore/endpoint.py", line 200, in _do_get_response
    http_response = self._send(request)
  File "/var/task/botocore/endpoint.py", line 269, in _send
    return self.http_session.send(request)
  File "/var/task/botocore/httpsession.py", line 281, in send
    raise SSLError(endpoint_url=request.url, error=e)

Это код, вызывающий эту ошибку:

_iot_client = boto3.client('iot-data',
                                aws_access_key_id=AWS_ACCESS_KEY_ID,
                                aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                                region_name= REGION_NAME)
    response = _iot_client.publish(
        topic = "app/test/response",
        qos = 1,
        payload = json.dumps(
            {
                'msgid': msgid,
                'status': status,
                'data': payload
            }
        )
    )

Нет ошибки в S3 или других сервисах через boto3. только iot-данные.

Он работает без проблем, когда я запускаю .py.

но возникает ошибка при запуске после развертывания в лямбда.

До недавнего времени ошибок не было.


person pang    schedule 14.12.2020    source источник
comment
Отвечает ли это на ваш вопрос? botocore.exceptions.SSLError: Ошибка проверки SSL в Windows   -  person L. Lauenburg    schedule 14.12.2020
comment
Я бы связался с Amazon по этому поводу. Сертификат, связанный с data.iot.ap-northeast-2.amazonaws.com, выпущен Symantec, и есть несколько сайтов, которые указывают, что они больше не принимаются, хотя информация немного сбивает с толку. Ни Firefox, ни Chrome не примут сертификат.   -  person stdunbar    schedule 14.12.2020
comment
@L. Lauenburg, ошибка возникает только iot-data. и мой компьютер Mac   -  person pang    schedule 15.12.2020
comment
Я решил эту ошибку. AWS IoT использует сертификаты Symantec. Я установил конечную точку ATS, которая отражает сертификат Amazon Trust Services. boto3.amazonaws. com / v1 / documentation / api / latest / reference / core /   -  person pang    schedule 16.12.2020


Ответы (2)


Мы также сталкиваемся с этой проблемой, в нашем случае обновление в библиотеке certifi (зависимость запросов) вызывало некоторый конфликт с публикацией boto3 iot, откат версии решил проблему, хотя мы не совсем уверены, в чем именно заключалась ошибка.

person Lucas Ventura    schedule 16.12.2020
comment
Не могли бы вы указать версии, которые не конфликтуют? - person Kate Melnykova; 16.12.2020
comment
certifi == 2020.11.8 похоже решает эту проблему - person Lucas Ventura; 17.12.2020
comment
@LucasVentura Это просто спасло мне день, спасибо !! (Хотя спустя несколько месяцев я удивлен, что это все еще проблема, но это исправило меня на время в каждом случае). - person gorgoth; 17.02.2021

У меня была такая же ошибка.

Просто вставьте это в начало вашего кода:

from botocore.exceptions import ClientError

Он должен работать.

Лучший.

person Salvish G.    schedule 07.01.2021