2017-12-13 10 views
0

ich mit MQTT Protokoll neu bin. Als ich nach einem MQTT-Server suchte, stellte ich fest, dass der Mosquitto-Broker einer der am häufigsten verwendeten ist, und deshalb habe ich angefangen, ihn zu benutzen. Ich muss einen MQTT-Client auf C# /. NET entwickeln und ich fand nur das M2Mqtt-Projekt und dieses C# MQTT client example.Erste AuthenticationException, wenn eine Verbindung M2Mqtt.MqttClient zu mosquitto Broker mit TLS

Ich schaffte es, install Mosquitto broker on Windows 10 und change the access control list using topics. Unter Verwendung von MqttClient kann ich mit einem Benutzernamen eine Verbindung zum Broker herstellen, Themen abonnieren und sie mit dem folgenden Code veröffentlichen.

Connect:

byte result = this.mqttClient.Connect(Guid.NewGuid().ToString(), username, string.Empty); 

Abonnieren:

this.mqttClient.Subscribe(new string[] { topic }, new byte[] { 2 }); 

Publish:

ushort result = this.mqttClient.Publish(topic, message, MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true); 

Jetzt möchte ich Sicherheit in der Kommunikation hinzuzufügen. Ich folgte diesen steps to create the CA certificate, the server key and server certificate (Ich habe die Zertifikate zweimal erstellt). Ich habe die mosquito.conf Datei wie in dem Link erklärt:

port 8883 
cafile C:\mosquitto\certs\ca.crt 
certfile C:\mosquitto\certs\server.crt 
keyfile C:\mosquitto\certs\server.key 

Ich weiß nicht, ob es notwendig ist, aber ich hinzugefügt, um die ca.crt zu den vertrauenswürdigen Stammzertifikaten these steps folgen.

änderte es den Client das CA-Zertifikat in der Verbindung verwendet werden:

//this.mqttClient = new MqttClient(brokerAddress); 
X509Certificate caCertificate = new X509Certificate("ca.crt"); 
this.mqttClient = new MqttClient(brokerAddress, 8883, true, caCertificate, null, MqttSslProtocols.TLSv1_0); 

Eine Kopie der ca.crt Datei ist im selben Ordner der .exe Datei. Wenn ich die Anwendung ausführen ich bekomme immer die gleiche Ausnahme:

  • uPLibrary.Networking.M2Mqtt.Exceptions.MqttConnectionException: Ausnahme an den Broker verbindet
  • [Innere Ausnahme] System.Security.Authentication.AuthenticationException: Das Remote-Zertifikat ungültig ist nach den Validierungsverfahren.

Wissen Sie, wenn ich etwas fehlt?

Antwort

1

verwaltet diese Funktion zu erhalten. Anstatt ein ca.crt zu verwenden, habe ich das Zertifikat auf eine ca.pfx exportiert und das PFX-Zertifikat im Cache vertrauenswürdiger Stammzertifizierungsstellen des Clientcomputers installiert.

zu installieren, einfach mit der rechten klicken Sie auf die Datei, wählen Sie Lokale Maschine und vollständige Anweisungen nach Bedarf. Entscheidend für die Auswahl des lokalen Computers und Auswahl des richtigen Zertifikatspeichers ("Vertrauenswürdige Stammzertifizierungsstellen").

+0

Und wie exportieren Sie das .crt-Zertifikat in .pfx? – Jon

+0

@Jon Sie zuerst installieren Sie es auf Ihre lokalen Zertifikate, und klicken Sie dann mit der rechten Maustaste> alle Aufgaben> exportieren, und folgen Sie den Schritten und wählen Sie .PFX, wenn Sie gefragt werden – Mason

Verwandte Themen