Intern

MQTT-SSLでメッセージ送信テストをしてみよう

はじめに

このブログはサーバーを立ち上げ後、Mosquitto(MQTT)のインストールおよびSSL証明の発行と設定が終わった後に、設定したMQTT-SSLが動くかWindowsPCでメッセージの送受信テストした内容を記載したものである
今回は、PublisherもSubscriberも一つのPCで行う

証明をいじる為、他のシステムに影響が出る場合があります
行う際は、気を付けて実行して下さい

前提として、サーバーの立ち上げ、証明書の発行、Mosquitto(MQTT)のインストールおよび設定がすでに完了していることが必要

・イメージ画像

実装準備

・「root」ユーザーに切り替える
 → 今後の設定で管理者権限だと楽

sudo su

・証明書がある場所を確認する
 →「fullchain.pem」があることを確認する

cd /etc/letsencrypt/live/"your_host_name"
ls

“your_host_name” は自身のサーバーのホスト名を入力する

・ubuntuファイル内にcopy
 → 直接証明をダウンロード出来ないのでcopyしてくる

sudo cp /etc/letsencrypt/live/"your_host_name"/fullchain.pem home/ubuntu/

・ファイルの所有者をuduntuに変更

sudo chown ubuntu:ubuntu/home/ubuntu/fullchain.pem

・ユーザー認証のための設定を行う
 → このコードを実行した後にパスワードを設定するように求められる

sudo mosquitto_passwd -c /etc/mosquitto/pwfile test

“test”は任意のユーザー名を設定する

・証明書のダウンロード

sudo wget https://letsencrypt.org/certs/isrgrootx1.pem -O /etc/ssl/certs/isrgrootx1.pem

・証明書ファイルの結合

sudo cat /etc/letsencrypt/live/"your_host_name"/chain.pem /etc/ssl/certs/isrgrootx1.pem | sudo tee /etc/letsencrypt/live/"your_host_name"/fullchain.pem

・Mosquitto不設定ファイルの更新

sudo systemctl restart mosquitto

・WinSCPを用いてファイルを任意の場所に移行する
 ↓ ログイン方法
 ・通信プロトコル:「SCP
 ・ホスト名:サーバーで設定したホスト名
 ・ユーザ名:「ubuntu」
 ・パスワード:ubuntuOS作成時に設定したパスワード

権限がなく移行できない場合は、一度ドキュメントフォルダに入れることで以降が可能になる

送受信テスト

・mqtt_cilentが必要なので準備しておく
・持ってきたファイルの正しいパスを指定させる必要がある

・受信側

mosquitto_sub --cafile "C:\fullchain.pem" -h "your_host_name" -p 8883 -u "user_name" -P "password" -t test_topic/topic -d

以下の内容を書き換える
 ・”your_host_name” = 自身のサーバーのホスト名
 ・”user_name” = 設定したユーザー名
 ・”password” = 設定したパスワード
 ・ test_topic = トピック名を設定

・送信側

mosquitto_pub --cafile "C:\fullchain.pem" -h "your_host_name" -p 8883 -u "user_name" -P "password" -t test_topic/topic -m "test_message" -d

以下の内容を書き換える
 ・”your_host_name” = 自身のサーバーのホスト名
 ・”user_name” = 設定したユーザー名
 ・”password” = 設定したパスワード
 ・ test_topic = トピック名を設定
 ・ test_message = メッセージ文

・完成画像

実行後、証明書ファイル (cert_file) と秘密鍵ファイル (cert_key) が一致していないと言われたら以下のコマンドで再発行をおススメします

sudo certbot certonly --standalone -d <自分のサーバ>