Azure IoT中心设备x509自签名证书(Python MQTT)

时间:2018-07-17 13:14:08

标签: python azure ssl mqtt azure-iot-hub

如何在自签名设备连接上建立(自签名)CA证书和客户端证书以及用户名/密码?

我正在与MQTT Python客户端一起使用,并且希望建立设备自签名证书选项。我已经能够连接SAS设备解决方案,但是现在我不知道我需要什么。

W.

当我使用SAS令牌时,我使用了天蓝色的Digicert CA,然后将设备密钥和证书设置为“无”。

现在我使用的是他们提供的相同的蓝色巴尔的摩根证书(Digicert),并使用OPENssl创建了客户端密钥,并从我打指纹的位置开始crt正确吗?

我用openssl创建了它们,并具有.crt和.key,所以我将它们传递给.pem。

那是因为客户端密钥的格式还是作为证书我应该提供什么?

因为我没有SAS令牌密钥,所以我作为密码和用户名现在应该是None或指纹,所以我应该在那放什么呢?

from paho.mqtt import client as mqtt
import ssl
import time

Data = {"Temp":44,"Pressure":55,"Power":66}
path_to_root_cert = "C:/Users/../digicert.cer"
device_cert = "C:/Users//../m2mqtt_ca.cer"
device_key = "C:/Users//../m2mqtt_ca.key"

device_id = "x509Device"
sas_token = "SharedAccessSignature sr=...."

使用设备资源管理器twin创建的SAS

iot_hub_name = "Iothubdev"

def on_connect(client, userdata, flags, rc):
    if rc==0:
        client.connecte_flag = True
        print ("Connected OK \n Device connected with result code: " + str(rc))
    else:
        print("Bad connection returned code=", str(rc))
        client.bad_connection_flag = True
        logging.info("Disconnecting reason:" + str(rc))

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

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

client = mqtt.Client(client_id=device_id, protocol=mqtt.MQTTv311)

client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_publish = on_publish

client.username_pw_set(username=iot_hub_name+".azure-devices.net/" + device_id, password=None)

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.tls_insecure_set(False)

try:
    client.connect(iot_hub_name+".azure-devices.net", port=8883) #Connect to Broker
except:
    print("Connection Failed")

#client.connect(iot_hub_name+".azure-devices.net", port=8883) #Connect to Broker

client.publish("devices/" + device_id + "/messages/events/", str(Data), qos=1)
client.loop_forever()
#time.sleep(2)
#client.disconnect()

> Azure IoT Hub Certificate 这里说使用巴尔的摩证书作为CA

客户crt

客户端密钥

但是现在不为我工作

1 个答案:

答案 0 :(得分:0)

我曾尝试过使用CA certificatre Device(CA证书设备),在该设备中,我首先在iot集线器上结算了证书,并与客户端进行了验证,无论哪种方式都不起作用。

我没有使用Powershell,所以我不知道...我使用过openssl

使用openssl来创建CA证书,然后使用带有验证生成代码的CN的客户端证书来验证证书。

enter image description here

enter image description here

关于代码,我该如何解决证书以及哪种格式,因为在Powershell中讨论了链接密钥和其他所有内容,但是它没有指定要求的内容。

应该是: 首先获得Azure Baltimore证书?? CA证书 验证码

或 CA证书 客户证书已验证的CN 客户端密钥

(以及扩展名?)

path_to_root_cert = "C:/Users/../digicert.cer"
device_cert = "C:/Users//../m2mqtt_ca.cer"
device_key = "C:/Users//../m2mqtt_ca.key"

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)

@Michael Xu-MSFT