AWS IoT MQTT с использованием WebSocket: CERTIFICATE_VERIFY_FAILED - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь настроить AWS IoT, используя скрипт Python, как указано в этой ссылке :

Я могу подключиться к AWS IoT MQTT без WebSocket (используется сертификат x.509).

# creates the AWS IoT 
def createIoT(): 
   iot = AWSIoTMQTTShadowClient('AWSHome') 
   # update this with your own endpoint from the IOT dashboard 
   iot.configureEndpoint('allj.iot.reg.amazonaws.com', 443) 
   iot.configureCredentials('rootCA','private.key','certificate.crt') 
   iot.configureConnectDisconnectTimeout(10)  # 10 sec 
   iot.configureMQTTOperationTimeout(5)  # 5 sec 
   iot.connect() 
   return 

Но когда я пытаюсь подключиться к AWS IoT MQTT с WebSocket, я получаю следующую ошибку:

Использование сертификата, созданного с помощью этой команды: wget

# creates the AWS IoT 
def createIoT(): 
   iot = AWSIoTMQTTShadowClient('AWSHome') 
   # update this with your own endpoint from the IOT dashboard 
   iot.configureEndpoint('asdasd.reg.amazonaws.com', 443) 
   iot.configureCredentials('VeriSign-Class%203-Public-Primary-Certification-Authority-G5.pem') 
   iot.configureConnectDisconnectTimeout(10)  # 10 sec 
   iot.configureMQTTOperationTimeout(5)  # 5 sec 
   iot.connect() 
   return 

Ошибка:

    Traceback (most recent call last): 
    File "./awshome.py", line 60, in <module> iot = createIoT() 
    File "./awshome.py", line 50, in createIoT iot.connect() File "/home/pi/.local/lib/python2.7/site-packages/AWSIoTPythonSDK/MQTTLib.py", line 1216, in connect return         
    self._AWSIoTMQTTClient.connect(keepAliveIntervalSecond) 
    File "/home/pi/.local/lib/python2.7/site-packages/AWSIoTPythonSDK/MQTTLib.py", line 485, in connect return self._mqtt_core.connect(keepAliveIntervalSecond) 
    File "/home/pi/.local/lib/python2.7/site-packages/AWSIoTPythonSDK/core/protocol/mqtt_core.py", line 192, in connect self.connect_async(keep_alive_sec, self._create_blocking_ack_callback(event)) 
    File "/home/pi/.local/lib/python2.7/site-packages/AWSIoTPythonSDK/core/protocol/mqtt_core.py", line 219, in connect_async 
    raise e 
    ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

С мая 2018 года изменились как конечная точка, так и сертификаты для IoT-ядра AWS.

Короче нужно:

  1. Измените свою конечную точку на a1am7bjirugllj-ats.iot.us-east-1.amazonaws.com (обратите внимание на -ats)
  2. Используйте один из корневых центров сертификации AWS (https://www.amazontrust.com/repository/AmazonRootCA1.pem)

Полная информация: https://aws.amazon.com/blogs/iot/aws-iot-core-ats-endpoints/

0 голосов
/ 02 ноября 2018

Возможно, у вас есть самозаверяющий сертификат или что-то еще, что делает сертификат недействительным. Вопрос в том, чего вы хотите достичь ... Если дело в том, чтобы это работало:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

Это довольно уродливое решение, здесь и здесь у вас есть более широкое объяснение.

...