2014-10-30 26 views

Odpowiedz

16

Jest mały przewodnik, ale to nie mówi wiele: http://mosquitto.org/man/mosquitto-tls-7.html

trzeba je ustalić: plik_CA keyfile cafile

one można wygenerować za pomocą poleceń w powyższym linku. Ale łatwiej jest korzystać z tego skryptu: https://github.com/owntracks/tools/blob/master/TLS/generate-CA.sh

Po uruchomieniu skryptu i zmieniając config może to wyglądać tak:

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

Jeśli mosquitto mówi Unable to load server key file oznacza to, że użytkownik, który pracuje mosquitto nie mieć pozwolenie na odczytanie pliku. Nawet jeśli uruchomisz go jako root, broker może zacząć jako inny użytkownik, np. Mosquitto. Aby rozwiązać ten problem, wykonaj np. chown mosquitto:root keyfile

Aby połączyć się z brokerem, klient będzie potrzebował pliku ca.crt. Jeśli nie dostarczy to broker powie coś w stylu:

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

Aby dostarczyć go do komendy mosquitto_sub użyć --cafile pathToCaCrt. Pakiet ca.crt może być dystrybuowany z klientami i upewni się, że serwer, do którego jest podłączony, jest właściwie prawidłowym serwerem.

Flaga mosquitto_sub nie powoduje, że klient akceptuje wszystkie certyfikaty (jak w przypadku wget lub podobnego), to po prostu pozwala, aby certyfikat nie miał hosta, z którym łączysz się pod wspólną nazwą. Powinieneś więc upewnić się, że twój certyfikat jest nazwą hosta twojego brokera.

+0

Poręczny przewodnik, który można modyfikować; http://jpmens.net/2013/09/01/installing-mosquitto-on-a-raspberry-pi/ –

4

Aby zabezpieczyć dostęp do WebSocket Mosquitto, np. przy użyciu certyfikatu szyfrowania Powiedzmy, plik konfiguracyjny może wyglądać następująco:

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 

Upewnij się, że pliki są odczytywane przez Mosquitto (Debian w szczególności biegnie Mosquitto pod użytkownikiem mosquitto, który jest nieuprzywilejowanych). Potrzebujesz aplikacji Mosquitto 1.4 do obsługi WebSockets.

Aby połączyć się z tym websocket używającej klienta PAHO JavaScript:

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

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

Należy pamiętać, że nie oznacza to jeszcze żadnej kontroli dostępu, dzięki czemu MQTT broker będzie publicznie dostępna. Możesz również dodać autoryzację.

+1

Chcę tylko dodać. Jeśli korzystasz z AWS EC2, będziesz musiał ustawić reguły grupa bezpieczeństwa, aby otworzyć port (w tym przypadku 9001) ... mam naprawdę źle trolowane – Vic