MQTT TLS соединение Python --- Vb.net - PullRequest
0 голосов
/ 13 мая 2018

Мой компьютер должен общаться с Amazon AWS iot.

Я последовал за мастером amazon (узел js), чтобы создать соединение и сертификат для моего компьютера. Он сгенерировал для меня 4 файла сертификата. (Сертификат, 2 ключа и рут-ка)

Pippo.cert.pem, Pippo.private.key, Pippo.public.key, Root-ca.crt

Если я использую raspberry и скрипт на Python, все работает правильно. Это соединяет, публикует так далее…

В скрипте python я вижу, что в настройках соединений он использует и передает 3 файла сертификата.

cert_path = "/home/pi/iot/certs/"
host = "xxxxxxxxx.iot.us-west-2.amazonaws.com"
topic = "Domotica"
root_cert = cert_path + "root-CA.crt"
cert_file = cert_path + "pippo.cert.pem"
key_file = cert_path + "pippo.private.key"

client.tls_set(root_cert,certfile = cert_file,keyfile =   key_file,cert_reqs=ssl.CERT_REQUIRED,tls_version=ssl.PROTOCOL_TLSv1_2,ciphers=None)
client.connect(host, 8883, 60)

ОК, это работает

Мне нужно сделать то же самое на ПК с Windows, используя VB.net (но я пробовал и в C ++, и это то же самое) В моей Visual Studio 2017 в моем проекте я установил библиотеку nuget пакета M2MQTT от Paolo Patierno. Итак, следуя параметрам подключения и требуемым параметрам, я записал код, ПРОСТО, чтобы попытаться установить соединение ………. Здесь я заметил, что параметры подключения принимают и работают только с 2, ДВУМ сертификатом и не требуют и используют файл .KEY (в то время как Python делает) Поэтому я мог использовать только Ca-сертификат и сертификат клиента, а НЕ закрытый ключ.

Это мой код ……

Dim Endpoint As String = "xxxxxxxxxxxxxxxx.iot.us-west-2.amazonaws.com"
    Dim Port As Integer = 8883

    Dim clientCert As New X509Certificate("D:\Optoteam\pippo.cert.pem")
    Dim cacert As New X509Certificate("D:\Optoteam\root-ca.crt")

    Dim Client = New MqttClient(Endpoint, Port, True, cacert, clientCert, MqttSslProtocols.TLSv1_2, Nothing)
    Client.ProtocolVersion = MqttProtocolVersion.Version_3_1_1

    Dim connesso As Byte = Client.Connect("TestTestTest")

    If (Client.IsConnected) Then
        Client.Subscribe(New String() {"Domotica"}, New Byte() {MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE})
        Client.Publish("Domotica", Encoding.UTF8.GetBytes("Prova"))
    End If

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

Он не может подключиться к серверу AWS iot MQTT (в то время как python с тем же сертификатом это делает) Я получил ошибку ниже ... ..

uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException: «Исключение при подключении к брокеру» Win32Exception: полученное сообщение было неожиданным или плохо отформатировано

если я изменил инструкцию по соединению с FALSE вместо TRUE

Dim Client = New MqttClient(Endpoint, Port, false, cacert, clientCert, MqttSslProtocols.TLSv1_2, Nothing)

Я получаю это сообщение об ошибке.

    StackTrace  "   at uPLibrary.Networking.M2Mqtt.MqttClient.SendReceive(Byte[] msgBytes, Int32 timeout) in c:\Users\ppatierno\Source\Repos\m2mqtt\M2Mqtt\MqttClient.cs:line 1094" & vbCrLf & "   at uPLibrary.Networking.M2Mqtt.MqttClient.SendReceive(MqttMsgBase msg, Int32 timeout) in c:\Users\ppatierno\Source\Repos\m2mqtt\M2Mqtt\MqttClient.cs:line 1117" & vbCrLf & "   at uPLibrary.Networking.M2Mqtt.MqttClient.Connect(String clientId, String username, String password, Boolean willRetain, Byte willQosLevel, Boolean willFlag, String willTopic, String willMessage, Boolean cleanSession, UInt16 keepAlivePeriod) in c:\Users\ppatierno\Source\Repos\m2mqtt\M2Mqtt\MqttClient.cs:line 567" & vbCrLf & "   at uPLibrary.Networking.M2Mqtt.MqttClient.Connect(String clientId, String username, String password, Boolean cleanSession, UInt16 keepAlivePeriod) in c:\Users\ppatierno\Source\Repos\m2mqtt\M2Mqtt\MqttClient.cs:line 512" & vbCrLf & "   at MQTT.Form1.Form1_Load(Object sender, EventArgs e) in C:\Users\Leonardo\Documents\Visual Studio 2017\Projects\MQTT\MQTT\Form1.vb:line 25" & vbCrLf & "   at System.EventHandler.Invoke(Object sender, EventArgs e)" & vbCrLf & "   at System.Windows.Forms.Form.OnLoad(EventArgs e)" & vbCrLf & "   at DevExpress.XtraEditors.XtraForm.OnLoad(EventArgs e)" & vbCrLf & "   at System.Windows.Forms.Form.OnCreateControl()" & vbCrLf & "   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)" & vbCrLf & "   at System.Windows.Forms.Control.CreateControl()" & vbCrLf & "   at System.Windows.Forms.Control.WmShowWindow(Message& m)" & vbCrLf & "   at System.Windows.Forms.Control.WndProc(Message& m)" & vbCrLf & "   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)" & vbCrLf & "   at System.Windows.Forms.Form.WmShowWindow(Message& m)" & vbCrLf & "   at System.Windows.Forms.Form.WndProc(Message& m)" & vbCrLf & "   at DevExpress.XtraEditors.XtraForm.WndProc(Message& msg)" & vbCrLf & "   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)" & vbCrLf & "   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)" & vbCrLf & "   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)"    String

Вы можете мне помочь ?? Проблема в отсутствующих параметрах файла закрытого ключа? Этот знаменитый третий файл, о котором я говорю?

Пожалуйста, помогите мне. Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...