2014-10-30 5 views
11

Ich versuche, einen Moskito-Broker einzurichten, der mit ssl/tls verschlüsselt ist. Ich möchte keine Client-Zertifikate generieren. Ich möchte nur eine verschlüsselte Verbindung.Wie richten Sie verschlüsselte Mosquitto-Broker wie eine Webseite mit https ein?

Die man-Seite beschreibt nur die Einstellungen, die verfügbar sind, nicht welche benötigt werden und wie sie verwendet werden.

Welche Einstellungen werden benötigt und wie werden sie eingestellt?

Ich benutze mosquitto 1.3.5

Antwort

16

Es gibt einen kleinen Führer hier, aber es sagt nicht viel: http://mosquitto.org/man/mosquitto-tls-7.html

Sie müssen diese setzen: certfile keyfile CaFile

Sie kann mit den Befehlen im obigen Link generiert werden. Aber einfacher ist dieses Skript zu verwenden: https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh

Nachdem das Skript ausgeführt wird und die Änderung der Konfigurations es in etwa so aussehen könnte:

listener 8883 
cafile /etc/mosquitto/certs/ca.crt 
certfile /etc/mosquitto/certs/hostname.localdomain.crt 
keyfile /etc/mosquitto/certs/hostname.localdomain.key 

Wenn mosquitto Unable to load server key file sagt, bedeutet es, dass der Benutzer die mosquitto läuft nicht Habe die Erlaubnis, die Datei zu lesen. Selbst wenn Sie es als root starten, startet der Broker möglicherweise als ein anderer Benutzer, zum Beispiel mosquitto. Um dies zu lösen, z.B. chown mosquitto:root keyfile

Zur Verbindung mit dem Broker benötigt der Client die ca.crt-Datei. Wenn Sie dies nicht liefern kann der Broker etwas sagen wie:

OpenSSL Error: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

es dem mosquitto_sub Befehl liefern Sie --cafile pathToCaCrt verwenden. Der ca.crt kann mit den Clients verteilt werden und stellt sicher, dass der Server, mit dem er verbunden ist, der richtige Server ist. Das Flag von mosquitto_sub lässt den Client nicht alle Zertifikate akzeptieren (wie mit wget oder ähnlichem), es erlaubt nur, dass das Zertifikat nicht den Host hat, mit dem Sie sich im allgemeinen Namen verbinden. Sie sollten also sicherstellen, dass Ihr Broker den Broker-Host als allgemeinen Namen hat.

+0

eine handliche Anleitung hier, die Sie ändern können; http://jpmens.net/2013/09/01/installing-mosquitto-on-a-raspberry-pi/ –

4

Um WebSocket Zugang von Mosquitto, z. Mit Hilfe eines Encrypt Zertifikat Lassen Sie uns, könnte Ihre config-Datei wie folgt aussehen:

listener 9001 
protocol websockets 
certfile /etc/letsencrypt/live/yourdomain.com/cert.pem 
cafile /etc/letsencrypt/live/yourdomain.com/chain.pem 
keyfile /etc/letsencrypt/live/yourdomain.com/privkey.pem 

Vergewissern Sie sich, dass die Dateien lesbar sind durch mosquitto (Debian insbesondere läuft mosquitto unter dem mosquitto Benutzer, die nicht privilegierten ist). Sie benötigen Mosquitto 1.4 um WebSockets zu unterstützen.

dieser WebSocket mit dem Paho JavaScript-Client verbinden:

// host and port overwritten at connect 
var mqtt = new Paho.MQTT.Client("yourdomain.com", 9001, ""); 

mqtt.connect({ 
    hosts: [ "wss://yourdomain.com:9001/" ], 
    useSSL: true 
}); 

Beachten Sie, dass dies nicht die Kontrolle keinen Zugang noch bedeutet, wird so Ihre MQTT Broker öffentlich zugänglich sein. Vielleicht möchten Sie auch eine Autorisierung hinzufügen.

+1

möchte nur hinzufügen .. wenn Sie auf AWS EC2 sind, müssen Sie die eingehenden Regeln Ihres festlegen Sicherheitsgruppe, um den Hafen zu öffnen (9001 in diesem Fall) ... Ich habe wirklich schlecht geschleppt – Vic

Verwandte Themen