Membuat Mqtt Broker Memakai Mosquitto

by jq_rbp in Circuits > Wireless

172 Views, 0 Favorites, 0 Comments

Membuat Mqtt Broker Memakai Mosquitto

mosquitto_network-287x300.png

Berikut adalah salah satu cara membuat mqtt broker menggunakan mosquitto.

Penjelasan menyangkut pengaturan mosquitto dan pembuatan sertifikat (self-signed) yang nantinya dapat digunakan dalam komunikasi mqtt broker - klien.

Instal Mosquitto Mqtt Broker Dan Client

Untuk instalasi (tergantung distro yang digunakan) di sini menggunakan perintah apt:

$sudo apt install mosquitto mosquitto-clients

Pembuatan File User - Pass Untuk Mosquitto

Perintah dasar pembuatan file konfigurasi password:

$sudo mosquitto_passwd -c /etc/mosquitto/passwd <mosquitto user>

Contoh:

$sudo mosquitto_passwd -c /etc/mosquitto/passwd admin

Lalu ketik password di prompt yang keluar:

Password: <mosquitto user password>
Reenter password: <mosquitto user password>

Contoh di sini akan menggunakan:

username: admin

password: adminpass

Pembuatan Sertifikat (Self-Signed)

Unduh file generate-CA.sh:

$wget https://raw.githubusercontent.com/owntracks/tools/master/TLS/generate-CA.sh
$chmod a+rx ./generate-CA.sh

Atur Variabel "Shell" Yang Sedang Dijalankan

Sertifikat yang dibuat dengan perintah generate-CA.sh, harus dapat diikat dengan ip atau hostname dari mqtt broker. Oleh karena itu, sebelum menjalankan perintah ini, ada variabel "shell environment" yang harus diatur terlebih dahulu, yaitu IPLIST dan HOSTLIST.

Kedua variabel ini harus diisi dengan daftar alamat ip dan hostname dimana mosquitto akan dijalankan / diteruskan, misal:

$export IPLIST="172.13.14.15 127.0.0.1 192.168.1.1" 
$export HOSTLIST="172.13.14.15 192.168.1.1 localhost raspberrypi.local a.contoh.com"

Tips:

  • Ganti daftar ip dan hostname dari perintah di atas sesuai dengan konfigurasi network yang telah dibuat.
  • Masukkan saja semua ip dan hostname yang nantinya akan dihubungi oleh semua mqtt klien, termasuk juga untuk klien yang akan dijalankan dalam localhost.

Buat File Sertifikat Ca Dan Key Untuk Mqtt Server

Jalankan perintah:

$sudo ./generate-CA.sh

Lalu copy ke dalam folder mosquitto:

$sudo cp ca.crt /etc/mosquitto/ca_certificates/

Bersama dengan sertifikat ca ini, biasanya terdapat juga file sertifikat lain dengan tipe .crt dan .key yang bisa digunakan untuk mosquitto. Sertifikat ini dapat di-copy juga ke dalam folder konfigurasi mosquitto.

Misal jika terdapat file localhost.crt dan localhost.key:

$sudo cp localhost.crt /etc/mosquitto/certs/
$sudo cp localhost.key /etc/mosquitto/certs/

Buat Sertifikat Untuk Klien

Jalankan perintah:

$sudo ./generate-CA.sh client klien

Jika berhasil nantinya akan terbentuk file sertifikat klien.crt dan klien.key yang bisa digunakan oleh mqtt klien untuk melakukan koneksi ke mosquitto broker.

Untuk itu sertifikat tersebut harus diubah properti akses-nya supaya dapat dibaca dan diakses oleh klien yang bersangkutan:

$sudo chmod a+rx klien.crt
$sudo chmod a+rx klien.key

File ca.crt juga dibutuhkan oleh klien dan terkadang juga perlu diubah properti akses-nya:

$sudo chmod a+rx ca.crt

Buat File Konfigurasi Untuk Mosquitto

Buka program nano untuk membuat file baru:

$sudo nano /etc/mosquitto/conf.d/default.conf

Masukkan / Copy konfigurasi ini ke dalam program nano:

allow_anonymous false
password_file /etc/mosquitto/passwd
listener 8883
cafile /etc/mosquitto/ca_certificates/ca.crt
certfile /etc/mosquitto/certs/localhost.crt
keyfile /etc/mosquitto/certs/localhost.key
require_certificate true
tls_version tlsv1.1

Simpan lalu keluar: tekan Ctrl-x lalu yes

Catatan:

  • tls di sini diset dalam versi 1.1 karena versi ini merupakan versi yang cukup stabil dalam library wifi tls dari arduino project. Versi yang lebih baru dilaporkan masih memiliki bug yang perlu diperbaiki.
  • Sesuaikan konfigurasi cafile, certfile, dan keyfile menjadi alamat file yang telah di-copy / dibuat sebelumnya.

Restart Mosquitto

$sudo systemctl restart mosquitto

Tes Koneksi Subscribe / Publish

Apabila semua telah berhasil dengan baik, koneksi ke mqtt server bisa dites dengan cara men-subscribe / publish ke sebuah dummy topic. Proses subscribe / publish dilakukan dengan menggunakan program untuk mqtt klien, seperti: mosquitto_sub dan/atau mosquitto_pub.

Untuk melakukan koneksi, kedua program klien ini harus menggunakan password dan sertifikat-sertifikat (ca.crt, klien.crt, dan klien.key) yang telah dibuat sebelumnya.

Dasar perintah subscribe:

$mosquitto_sub -h <mosquitto hostname> -p <mosquitto port> --cert <sertifikat .crt klien> --key <sertifikat klien.key> --cafile <sertifikat ca> --tls-version tlsv1.1 -u <mosquitto user> -P <mosquitto password> -t <topik>

Dasar perintah publish:

$mosquitto_pub -h <mosquitto hostname> -p <mosquitto port> --cert <sertifikat .crt klien> --key <sertifikat .key klien> --cafile <sertifikat ca> --tls-version tlsv1.1 -u <mosquitto user> -P <mosquitto password> -t <topik mqtt> -m <pesan> 

Contoh subscribe:

$mosquitto_sub -h 127.0.0.1 -p 8883 --cert klien.crt --key klien.key --cafile ca.crt --tls-version tlsv1.1 -u admin -P adminpass -t "dummy"

Contoh publish:

$mosquitto_pub -h 127.0.0.1 -p 8883 --cert klien.crt --key klien.key --cafile ca.crt --tls-version tlsv1.1 -u admin -P adminpass -t "dummy" -m "halo mosquitto dummy"