{"id":545687,"date":"2017-03-04T11:40:46","date_gmt":"2017-03-04T10:40:46","guid":{"rendered":"https:\/\/blog.embedded-system-design.de\/?p=545687"},"modified":"2017-03-04T12:48:03","modified_gmt":"2017-03-04T11:48:03","slug":"lets-mqtt","status":"publish","type":"post","link":"https:\/\/blog.embedded-system-design.de\/index.php\/2017\/03\/04\/lets-mqtt\/","title":{"rendered":"Let&#8217;s MQTT"},"content":{"rendered":"<p>Knapp 60.000 MQTT-Broker sollen <a href=\"https:\/\/www.heise.de\/security\/meldung\/MQTT-Protokoll-IoT-Kommunikation-von-Reaktoren-und-Gefaengnissen-oeffentlich-einsehbar-3629650.html\">\u00f6ffentlich einsehbar sein und angeblich nur zwei davon nutzen eine Transportverschl\u00fcsselung<\/a>. Zeit etwas daran zu \u00e4ndern! Die Kurzanleitung verhilft zur Installation und Konfiguration des quelloffenen MQTT-Brokers <a href=\"https:\/\/mosquitto.org\/\">Mosquitto<\/a> unter Linux mit verschl\u00fcsselter \u00dcbertragung. Beispielhaft werden von <a href=\"https:\/\/letsencrypt.org\/\">Letsencrypt<\/a> ausgestellte Zertifikate integriert und kurz in die Benutzer\/Passwort-basierte Authentifizierung und Rechteverwaltung eingef\u00fchrt.<\/p>\n<p><strong>MQTT, was ist das und wozu ist das gut?<\/strong><\/p>\n<p>Das Message Queue and Telemetry Transport (MQTT) Protocol dient dem Austausch von Telemetriedaten zwischen Maschinen und Ger\u00e4ten nach einem einfachen Publish\/Subcribe-Model. Werden von einem Ger\u00e4t Nachrichten unter einem Thema ver\u00f6ffentlicht, verteilt ein Broker diese an alle angemeldeten Clients, die dieses Thema abboniert haben. Damit nur berechtigte Ger\u00e4te Nachrichten zu bestimmten Themen abonnieren und ver\u00f6ffentlichen d\u00fcrfen, ist eine Authentifizierung der Ger\u00e4te gegen\u00fcber dem Broker sinnvoll. Eine Transportverschl\u00fcsselung ist empfohlen, um sowohl die Authentifizierungsdaten als auch die Nachrichten auf dem Weg durch das Netz vor den neugierigen Blicken Dritter zu sch\u00fctzen.<\/p>\n<p><strong>MQTT-Broker Mosquitto<\/strong><\/p>\n<p><a href=\"https:\/\/mosquitto.org\/\">Mosquitto<\/a> ist ein quelloffener MQTT-Nachrichten-Broker. Er l\u00e4sst sich mit dem Debian Package-Manager installieren:<\/p>\n<pre>  sudo apt-get install mosquitto<\/pre>\n<p>oder alternativ von <a href=\"https:\/\/mosquitto.org\/download\/\">https:\/\/mosquitto.org\/download\/<\/a> herunterladen und gem\u00e4\u00df dortiger Anleitung installieren.<\/p>\n<p><strong>Konfiguration f\u00fcr TLS (Transport Layer Security) mit Letsencrypt<\/strong><\/p>\n<p>TLS-Zertifikate gibt es per <a href=\"https:\/\/letsencrypt.org\/\">Letsencrypt<\/a>:<\/p>\n<pre>  letsencrypt certonly --rsa-key-size 4096 -d example.com<\/pre>\n<p>Um die TLS-Verschl\u00fcsselung mit den ausgestellten Zertifikaten nutzen zu k\u00f6nnen, m\u00fcssen diese in der Konfigurationsdatei <em>\/etc\/mosquitto\/mosquitto.conf<\/em> bzw. im Konfigurationsverzeichnis <em>\/etc\/mosquitto\/conf.d\/<\/em> angegeben werden:<\/p>\n<pre>  bind_address xx.xx.xx.xx\r\n  port 8883\r\n  cafile \/etc\/letsencrypt\/live\/example.com\/chain.pem\r\n  certfile \/etc\/letsencrypt\/live\/example.com\/cert.pem\r\n  keyfile \/etc\/letsencrypt\/live\/example.com\/privkey.pem<\/pre>\n<p><strong>Konfiguration der Rechteverwaltung per Benutzername und Passwort<\/strong><\/p>\n<p>Um die Authentifizierung durch Benutzernamen und Passwort zu aktivieren, muss in der Konfigurationsdatei folgendes angegeben sein:<\/p>\n<pre>  allow_anonymous false\r\n  password_file \/etc\/mosquitto\/passwords\r\n  acl_file \/etc\/mosquitto\/access.acl<\/pre>\n<p>Die Passw\u00f6rter werden dann wie angegeben in der Datei <em>\/etc\/mosquitto\/passwords<\/em> erwartet. Accounts k\u00f6nnen mit<\/p>\n<pre>  mosquitto_passwd \/etc\/mosquitto\/passwords username<\/pre>\n<p>angelegt bzw. das Passwort ge\u00e4ndert werden. Die Datei sollte vor neugierigen Blicken gesch\u00fctzt sein:<\/p>\n<pre>  chmod 0600 \/etc\/mosquitto\/passwords<\/pre>\n<p>Die Zuordnung von Zugriffsberechtigungen und Themen erfolgt durch die in der Konfigurationsdatei angegebenen Access-Control-List (ACL) Datei <em>\/etc\/mosquitto\/access.acl<\/em>:<\/p>\n<pre>  user username\r\n  pattern readwrite #<\/pre>\n<p>Durch diesen Eintrag wird dem Benutzer <em>username<\/em> das Lesen und Schreiben aller Themen gew\u00e4hrt. &#8218;#&#8216; steht f\u00fcr alle Topics. Es kann auch eine bestimmte Themenbezeichnung angegeben werden. Um z.B. f\u00fcr den Benutzer <em>observer<\/em> das Lesen f\u00fcr das Thema <em>foo<\/em> zu aktivieren:<\/p>\n<pre>  user observer\r\n  topic read foo<\/pre>\n<p><strong>Eine Testverbindung mit dem Mosquitto-Client herstellen<\/strong><\/p>\n<p>Sofern auf dem Client-System noch nicht bekannt, ist zur Pr\u00fcfung des von <a href=\"https:\/\/letsencrypt.org\/\">Letsencrypt<\/a> ausgestellten TLS-Zertifikats des MQTT-Brokers das entsprechende Wurzelzertifikat erforderlich. Dieses kann von <a href=\"https:\/\/www.identrust.com\/certificates\/trustid\/root-download-x3.html\">https:\/\/www.identrust.com\/certificates\/trustid\/root-download-x3.html<\/a> bezogen werden. Den angezeigte Inhalt zwischen<\/p>\n<pre>  -----BEGIN CERTIFICATE-----\r\n  ...\r\n  -----END CERTIFICATE-----<\/pre>\n<p>mit einem Texteditor in <em>mosquitto-letsencrypt-ca.crt<\/em> zur sp\u00e4teren Verwendung speichern.<\/p>\n<p>Eine Nachrichten-Publikation kann dann z.B. mit<\/p>\n<pre>  mosquitto_pub -h example.com -p 8883 --cafile mosquitto-letsencrypt-ca.crt -m 1 -t test -u username -P password<\/pre>\n<p>erfolgen.<\/p>\n<p>Unter Android habe ich erfolgreich eine Verbindung mit <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=net.routix.mqttdash\">MQTT Dash<\/a> aufbauen und das Thema beobachten k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Knapp 60.000 MQTT-Broker sollen \u00f6ffentlich einsehbar sein und angeblich nur zwei davon nutzen eine Transportverschl\u00fcsselung. Zeit etwas daran zu \u00e4ndern! Die Kurzanleitung verhilft zur Installation und Konfiguration des quelloffenen MQTT-Brokers Mosquitto unter Linux mit verschl\u00fcsselter \u00dcbertragung. Beispielhaft werden von Letsencrypt ausgestellte Zertifikate integriert und kurz in die Benutzer\/Passwort-basierte Authentifizierung und Rechteverwaltung eingef\u00fchrt. MQTT, was ist &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/blog.embedded-system-design.de\/index.php\/2017\/03\/04\/lets-mqtt\/\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8],"tags":[62],"_links":{"self":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/545687"}],"collection":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/comments?post=545687"}],"version-history":[{"count":10,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/545687\/revisions"}],"predecessor-version":[{"id":545697,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/posts\/545687\/revisions\/545697"}],"wp:attachment":[{"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/media?parent=545687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/categories?post=545687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.embedded-system-design.de\/index.php\/wp-json\/wp\/v2\/tags?post=545687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}