Мой компьютер должен общаться с 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
Вы можете мне помочь ??
Проблема в отсутствующих параметрах файла закрытого ключа? Этот знаменитый третий файл, о котором я говорю?
Пожалуйста, помогите мне. Большое спасибо