English Click this button for the international website

IoT server: veilige MQTT-communicatie met TLS

In het vorige artikel “IoT server: Mosquitto en Node Red op Raspberry Pi” installeerden we de Mosquitto MQTT broker en beveiligden het syteem door gebruikersnamen en wachtwoorden van de clients te vereisen. Maar als we echt veilige MQTT-communicatie willen, dan moeten we nog wel wat meer werk verzetten.

Veilige MQTT-communicatie met self-signed TLS-certificaten

Standaard gaat al het dataverkeer niet-versleuteld over het netwerk. Op onbetrouwbare netwerken is dit een veiligheidsrisico. Gevoelige data zoals wachtwoorden kan dan makkelijk onderschept worden. In dit artikel zullen we het dataverkeer beveiligen en versleutelen met behulp van self-signed TLS-certificaten.

Download het hulpscript

Om het genereren van de certificaten wat makkelijker te maken zullen we een script van OwnTracks gebruiken. Log in op je Raspberry Pi en zorg dat de huidige directory de home-directory is:
cd ~
Maak een nieuwe directory die niet toegankelijk is voor andere gebruikers van het systeem:
mkdir certificates
chmod 700 certificates
cd certificates

Download het script vanaf Github door gebruik te maken van wget (typ/plak dit commando als één regel):
sudo wget https://raw.githubusercontent.com/owntracks/tools/master/TLS/generate-CA.sh

Wijzig de bestandsrechten van het script en maak het uitvoerbaar:
sudo chmod 700 generate-CA.sh

Genereer het servercertificaat

Voer het script uit om de bestanden voor het servercertificaat te genereren:
sudo ./generate-CA.sh
Het script genereert het CA (certificate authority) bestand, de certificaatbestanden, en gebruikt dan het CA om het certificaat te signeren. De bestandsnamen van het servercertificaat zullen hetzelfde zijn als de hostnaam van je systeem. In mijn geval is dit “raspberrypi”, die van jou zal waarschijnlijk anders zijn.

Kopieer ca.crt, [hostnaam].crt en [hostnaam].key naar de juiste directories:

sudo cp ca.crt /etc/mosquitto/ca_certificates/
sudo cp raspberrypi.crt /etc/mosquitto/certs/
sudo cp raspberrypi.key /etc/mosquitto/certs/

Maak Mosquitto eigenaar van de certificaatbestanden:
sudo chown -R mosquitto: /etc/mosquitto/certs/
sudo chown -R mosquitto: /etc/mosquitto/ca_certificates/

De Mosquitto-configuratie aanpassen

Open het configuratiebestand van de Mosquitto MQTT broker:
sudo nano /etc/mosquitto/conf.d/default.conf
En voeg de volgende regels toe:
listener 1883

listener 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
keyfile /etc/mosquitto/certs/raspberrypi.key
certfile /etc/mosquitto/certs/raspberrypi.crt
require_certificate true

Sla de wijzigingen op en herstart daarna Mosquitto:
sudo systemctl restart mosquitto
Je kunt eventuele problemen opsporen in het logbestand van Mosquitto:
tail /var/log/mosquitto/mosquitto.log

Genereer certificaten voor de clients

Ga terug naar de home-directory
cd ~
Maak een nieuwe directory aan voor de client-certificaten:
mkdir cients
chmod 700 clients
cd clients

Genereer de client-certificaten met het hulpscript (verander ‘mijnclientcertificaat’ in iets toepasselijks):
sudo ./generate-CA.sh mijnclientcertificaat
De bestanden van het client-certificaat zijn nu klaar op verplaatst te worden naar de client. Je kunt het certificaat testen met een app zoals bijvoorbeeld MQTTBOX (Linux/Mac/PC/Chrome):

IoT server: veilige MQTT-communicatie met TLS, testen met MQTTBox
IoT server: veilige MQTT-communicatie met TLS, testen met MQTTBox

Deze blogpost is ook beschikbaar in het Engels.

Voeg een reactie toe

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *