Ошибка проверки SSL при отправке данных через MQTT на устройство с проверкой подлинности x509 в Azure iot-hub - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь отправить данные датчика на подписанное устройство X509 ca, созданное в моем iot-hub, проверенное с помощью сертификатов, сгенерированных по следующей ссылке:

https://github.com/Azure/azure-iot-sdk-c/blob/master/tools/CACertificates/CACertificateOverview.md

Я прикрепилсозданный корневой сертификат, сертификат устройства и ключ устройства при отправке данных, как в следующем коде:

from paho.mqtt import client as mqtt
import ssl

path_to_root_cert = "<local path to the generated testonly-rootca.pem>"
device_cert = "<local path to the generated newdevice-cert.pem>"
device_key = "<local path to the generated newdevice-key.pem>

HubName = "iothub.azure-devices.net"
devicename = "device001"

def on_connect(client, userdata, flags, rc):
print ("Connected with result code: " + str(rc))
client.subscribe("devices/" + devicename + "/messages/devicebound/#")

def on_disconnect(client, userdata, rc):
print ("Disconnected with result code: " + str(rc))

def on_message(client, userdata, msg):
print (msg.topic+" "+str(msg.payload))

client.publish("devices/" + devicename + "/messages/events/", "{id=1}",qos=1)

def on_publish(client, userdata, mid):
print ("Sent message")

client = mqtt.Client(client_id=devicename, protocol=mqtt.MQTTv311)
client.on_connect = on_connect

client.on_disconnect = on_disconnect
client.on_message = on_message
client.on_publish = on_publish
client.username_pw_set(username=HubName + "/" + devicename, password=None)
client.tls_insecure_set(False)

client.tls_set(ca_certs=path_to_root_cert, certfile=device_cert, keyfile=device_key, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)
client.connect(HubName, port=8883)
client.publish("devices/" + devicename + "/messages/events/", "{id=MQTT Test}", qos=1)
client.loop_forever()

Я получаю вывод как:

SSL_Verification_failed

Я использую Paho дляподключайтесь напрямую к Azure iothub без использования Azure-Iothub-SDK.

1 Ответ

0 голосов
/ 04 июня 2018

Измените «созданный корневой сертификат» на DigiCert Baltimore Root Certificate как , в документе указано:

Чтобы установить соединение TLS, вам может потребоваться загрузить иссылка на корневой сертификат DigiCert Baltimore.Этот сертификат является тем, который Azure использует для защиты соединения.Вы можете найти этот сертификат в хранилище Azure-iot-sdk-c.Более подробную информацию об этих сертификатах можно найти на веб-сайте Digicert.

Для примера кода вы можете обратиться к " Образцу кода для устройства с аутентификацией x509 " в разделе этого ответа .

...