Encrypted mosquitto server

Last Update: 2023-04-16

Below, certificates and keys will be created for TLS. Then the misquitto configuration will be edited. Your server will run on localhost:8883 afterwards not localhost:1883.

Create directory for certificates

mkdir /etc/mosquitto/certs
cd /etc/mosquitto/certs

Create CA Key

Using password protection and 4096-bit RSA.

openssl genrsa -des3 -out m2mqtt_ca.key 4096
Create CA Certificate
openssl req -new -x509 -days 9000 -key m2mqtt_ca.key -out m2mqtt_ca.crt

Create Server Key

Using no password and 4096-bit RSA.

openssl genrsa -out m2mqtt_srv.key 4096

Create Server Sign Request

openssl req -new -out m2mqtt_srv.csr -key m2mqtt_srv.key -subj '/CN=localhost'

Create domain configuration domain.ext

This is important, so the domain and certificate can be validated.

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
IP.2 = ::1

With cool command line stuff this is:

cat > domain.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
IP.2 = ::1
EOF

Create Server Certificate

openssl x509 -req -CA m2mqtt_ca.crt -CAkey m2mqtt_ca.key \
  -in m2mqtt_srv.csr -out m2mqtt_srv.crt \
  -days 9000 -CAcreateserial -extfile domain.ext

Edit /etc/mosquitto/mosquitto.conf

Uncomment line with setting listener and add the following at the end of the line:

8883

Uncomment line with setting cafile and add the following at the end of the line:

/etc/mosquitto/certs/m2mqtt_ca.crt

Uncomment line with setting certfile and add the following at the end of the line:

/etc/mosquitto/certs/m2mqtt_srv.crt

Uncomment line with setting keyfile and add the following at the end of the line:

/etc/mosquitto/certs/m2mqtt_srv.key

These should be all changes you made just now:

listener 8883
cafile /etc/mosquitto/certs/m2mqtt_ca.crt
certfile /etc/mosquitto/certs/m2mqtt_srv.crt
keyfile /etc/mosquitto/certs/m2mqtt_srv.key

Don't forget to add the CAfile m2mqtt_ca.crt to your MQTT client!

Restart the mosquitto server

service mosquitto restart