NEWS
MQTT mit SSL und selbst-signiertem Zertifikat
-
Ich versuche MQTT mit SSL und selbst-signiertem Zertifikat zum Laufen zu bringen.
Ich trage im MQTT Broker/Client unter "Publikzertifikat" mein Server Certificate ein, und unter "Privatzertifikat" meinen Server Key. Ist das soweit richtig?
Dann gibt es da noch das "Kettenzertifikat" - ich finde keine Doku, was das genau ist, und ich kann da auch nur "keins" als einzige Möglichkeit wählen.
Wenn ich jetzt im MQTT Client ebenfalls SSL aktiviere, sehe ich im Log:
mqtt-client.0 2019-04-23 21:35:34.531 warn client error: Error: self signed certificate
Wie kann ich dafür sorgen, dass das selbst-signierte Zertifikat ohne Fehlermeldung akzeptiert wird?
Ich will definitiv nicht die Prüfung abschalten, wie es leider oft empfohlen wird - ich möchte dafür sorgen, dass mein Zertifikat akzeptiert wird.
Wie geht das?
Vielen Dank im voraus!
-
Hi,
ich habe das nach dieser Anleitung gemacht:
https://www.auxnet.de/verschluesseltes-mqtt-vom-und-zum-mosquitto-server/
Ging damit recht einfach. Ein Zwischenzertifikat (oder Kettenzertifikat) brauchst Du nicht unbedingt.
Grüße,
Balu -
Muss das eher unbeantwortete Thema nochmal auffrischen. Probiere aktuell auch eine SSL Verbindung zu meiner MQTT Adapterinstanz aufzubauen. Habe das eingestellte Public Zertifikat auf meinem Client und gebe dieses mit. Die Verbindung schlägt fehl, der Adapter loggt hierbei auf keinem Loglevel etwas passendes.
Mein Client sagt mir nur
Error: A TLS error occurred.
.Getestet habe ich das ganze unter Ubuntu mittels
mosquitto_pub
. Aufruf schaut so aus:mosquitto_pub -u "myUsername" -P "myPassword" -p 1883 -h 192.168.180.64 -t 'test_topic' -m 'test message' --cafile /home/moritz/Schreibtisch/cert.crt
Ohne SSL funktioniert es problemlos.
Hat jemand eine Verbindung zum MQTT Adapter (als Server) mittels SSL laufen und weiß evtl was ich falsch mache?
beste Grüße
fox
-
Ich war ebenfalls auf der Suche nach einer Lösung. Ich konnte die Ursache des Problems etwas eingrenzen. Zunächst scheint die Kommunikation mittels TLS zum Adapter bei mir zu funktionieren.
Das hier ist in etwa die Kette an nodejs modulen, die involviert sind
iobroker.mqtt -(erzeugt objekt)-> tls -(wird übergeben an)-> mqtt-connection -(nutzt für decodierung...)-> mqtt-packet
Das modul mqtt-connection selber ist derived vom Paket duplexify und nutzt intern das node module mqtt-packet für die eigentliche mqtt Verarbeitung.
Ab dem Modul "mqtt-connection" passiert allerdings nichts weiter mit der (erfolgreich aufgebauten) tls verbindung. Es werden keine Daten weiter gereicht. Für mich sieht es so aus, als wenn duplexify mit dem tls objekt nicht weiter Arbeiten kann.
Nach knapp einen ganzen Tag des erfolglosen Debuggens habe ich die native Unterstützung von TLS über iobroker.mqtt aufgegeben.
Stattdessen nutzt ich nun nginx als TLS proxy (basierend auf diesem Tutorial)Hier ist meine nginx config
stream { log_format mqtt '$remote_addr [$time_local] $protocol $status $bytes_received ' '$bytes_sent $upstream_addr'; server { listen 8883 ssl; # MQTT secure port ssl_certificate /path/to/certificates/self.crt; ssl_certificate_key /path/to/certificates/self.key; ssl_ciphers HIGH:!aNULL:!MD5; #ssl_session_cache shared:SSL:128m; # 128MB ~= 500k sessions ssl_session_tickets on; ssl_session_timeout 8h; proxy_pass <ip zu iobroker, wo MQTT drauf läuft>:1883; proxy_connect_timeout 1s; access_log /var/log/nginx/mqtt_access.log mqtt; error_log /var/log/nginx/mqtt_error.log info; # nginScript debug logging } }
Jetzt verbindet sich mein Tasmota Endgerät über MQTT+TLS verschlüsselt zu meinem iobroker.