ファイナンス、情報通信技術のスキル・アグリゲーション・サイト
Mosquitto(MQTT Broker)1.4.11 https://mosquitto.org を Windows 10 と、その Windows 10 マシンの Virtual Box 上の Ubuntu 16.04 LTS(ゲスト OS)にそれぞれインストールします。
相互に Subscribe 、Publish のコマンドラインクライアントで動作を確認、SSL/TLS の対応、Bridge の動作確認を行います。
https://mosquitto.org/download/ の Binary Instration より Windows 用の mosquitto-1.4.11-install-win32.exe をダウンロードして実行します。
Mosquitto のインストール後、インストール中に表示された、必要な DLL を Mosquitto のインストールディレクトリにコピーします。
「OpenSSL - install 'Win32 OpenSSL vXXXXX Light' then copy dlls to the mosquitto directory」は、http://slproweb.com/
「pthreads - copy 'pthreadVC2.dll' to the mosquitto directory」は、ftp://sources.redhat.com/
そして、「Windows管理ツール」の「サービス」にて、Mosquitto Broker を起動します。
なお、実行時に、VCRUNTIME140.dll がないというときは、Microsoft Visual C++ 2015 再頒布可能パッケージ Update 3 をインストールします。
また、MSVCR100.dll がないというときは、Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86) をインストールします。
mosquitto.conf は、インストール直後のデフォルトの状態ままから説明をはじめます。以降、その都度、設定を追加します。
インストール直後の mosquitto.conf のおおまかな構成を書き出してみました。
先に Mosquitto をインストールした Windows 10 マシンの Virtual Box 上の Ubuntu 16.04 LTS(ゲスト OS)に Mosquitto をインストールします。
$ sudo apt-get install mosquitto mosquitto-clients
バージョン 1.4.8 がインストールされました。
$ sudo add-apt-repository ppa:mosquitto-dev/mosquitto-ppa
$ sudo apt-get update
$ sudo apt-get upgrade
現時点で最新のバージョン 1.4.11 がインストールされました。
service コマンドで start 、stop などします。
$ sudo service mosquitto start
さて、Windows 10(ホスト OS)と Ubuntu 16.04 LTS(ゲスト OS)のネットワーク接続のために、Virtual Box のネットワークの設定で、アダプター2を有効化して、ホストオンリーアダプターを割り当てました。
ちなみに、私のマシンで確認したとき、Windows 10(ホスト OS)側の IP アドレスは 192.168.56.1、Ubuntu 16.04 LTS(ゲスト OS)側の IP アドレスは、192.168.56.101 でした。
以降の説明では、これらの IP アドレスをコマンドラインの例や設定例で使用します。
Windows 10(ホスト OS):
192.168.56.1
Ubuntu 16.04 LTS(ゲスト OS):
192.168.56.101
また、「Paho(MQTT Client Library)サンプルプログラム(Python、JavaScript)」では、mosquitto.conf に WebSocket を使用する設定を追加しています。
# WebSocket listener
listener 11883
protocol websockets
# Certificate based SSL/TLS support
listener 18883
protocol websockets
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
参考として、Windows10 64bit 版で確認していましたので、 Bash on Ububtu on Windows (Ubuntu 16.04 LTS)にも Mosquitto をインストールしてみました。現時点では、次に説明する Mosquitto Cilent ツールの mosquitto_sub、mosquitto_pub が、Windows 10(ホスト OS)と Ubuntu 16.04 LTS(ゲスト OS)の両方の Mosquitto Broker に対して動作することを確認しています。さらに、 Creators Update 後の Bash on Ububtu on Windows では、Mosquitto Broker の動作も確認しています。
Windows 10(ホスト OS)でコマンドプロンプトを起動して、Mosquitto のインストールディレクトリへ移動します。
Windows 10(ホスト OS)へ Subscribe。
> mosquitto_sub -t test
Windows 10(ホスト OS)へ Publish。
> mosquitto_pub -t test -m Message
Ubuntu 16.04 LTS(ゲスト OS)へ Subscribe。
> mosquitto_sub -t test -h 192.168.56.101
Ubuntu 16.04 LTS(ゲスト OS)へ Publish。
> mosquitto_pub -t test -h 192.168.56.101 -m Message
Ubuntu 16.04 LTS(ゲスト OS)で端末を起動します。
Ubuntu 16.04 LTS(ゲスト OS)へ Subscribe。
$ mosquitto_sub -t test
Ubuntu 16.04 LTS(ゲスト OS)へ Publish。
$ mosquitto_pub -t test -m Message
Windows 10(ホスト OS)へ Subscribe。
$ mosquitto_sub -t test -h 192.168.56.1
Windows 10(ホスト OS)へ Publish。
$ mosquitto_pub -t test -h 192.168.56.1 -m Message
SSL 証明書は、プライベート証明書を作成しました。手順については、以下も参照してください。
https://mosquitto.org/
「プライベート認証局でプライベート SSL/TLS 証明書を発行する」
作成した証明書や鍵は、それぞれ次のディレクトリへ保管しました。
Windows 10(ホスト OS)では
C:¥mosquitto¥certs
Ubuntu 16.04 LTS(ゲスト OS)では
/etc/mosquitto/certs
また、それぞれの ca.crt は交換して保存しました。
Windows 10(ホスト OS)では
C:¥mosquitto¥certs¥UbuntuCA.crt
Ubuntu 16.04 LTS(ゲスト OS)では
/etc/mosquitto/
さらに、それぞれの client.crt、client.key も交換して保存しました。
Windows 10(ホスト OS)では
C:¥mosquitto¥certs¥UbuntuClient.crt
C:¥mosquitto¥certs¥UbuntuClient.key
Ubuntu 16.04 LTS(ゲスト OS)では
/etc/mosquitto/
/etc/mosquitto/
mosquitto.conf に SSL 証明書等の設定を追加します。
https://mosquitto.org/
Windows 10(ホスト OS)の mosquitto.conf の設定例。
# Default listener
listener 1883
# Certificate based SSL/TLS support
listener 8883
cafile c:¥mosquitto¥certs¥ca.crt
certfile c:¥mosquitto¥certs¥server.crt
keyfile c:¥mosquitto¥certs¥server.key
Ubuntu 16.04 LTS(ゲスト OS)の mosquitto.conf の設定例。
# Default listener
listener 1883
# Certificate based SSL/TLS support
listener 8883
cafile /etc/mosquitto/certs/ca.crt
certfile /etc/mosquitto/certs/server.crt
keyfile /etc/mosquitto/certs/server.key
Windows 10(ホスト OS)でコマンドプロンプトを起動して、Mosquitto のインストールディレクトリへ移動します。
Windows 10(ホスト OS)へ Subscribe。
> mosquitto_sub --cafile c:¥mosquitto¥certs¥ca.crt -t test -p 8883
Windows 10(ホスト OS)へ Publish。
> mosquitto_pub --cafile c:¥mosquitto¥certs¥ca.crt -t test -p 8883 -m Message
Ubuntu 16.04 LTS(ゲスト OS)へ Subscribe。
> mosquitto_sub --cafile c:¥mosquitto¥certs¥UbuntuCA.crt -t test -p 8883 -h 192.168.56.101
Ubuntu 16.04 LTS(ゲスト OS)へ Publish。
> mosquitto_pub --cafile c:¥mosquitto¥certs¥UbuntuCA.crt -t test -p 8883 -h 192.168.56.101 -m Message
Ubuntu 16.04 LTS(ゲスト OS)で端末を起動します。
Ubuntu 16.04 LTS(ゲスト OS)へ Subscribe。
$ mosquitto_sub --cafile /etc/mosquitto/certs/ca.crt -t test -p 8883
Ubuntu 16.04 LTS(ゲスト OS)へ Publish。
$ mosquitto_pub --cafile /etc/mosquitto/certs/ca.crt -t test -p 8883 -m Message
Windows 10(ホスト OS)へ Subscribe。
$ mosquitto_sub --cafile /etc/mosquitto/certs/WindowsCA.crt -t test -p 8883 -h 192.168.56.1
Windows 10(ホスト OS)へ Publish。
$ mosquitto_pub --cafile /etc/mosquitto/certs/WindowsCA.crt -t test -p 8883 -h 192.168.56.1 -m Message
Windows 10(ホスト OS)でコマンドプロンプトを起動して、Mosquitto のインストールディレクトリへ移動します。
Windows 10(ホスト OS)へ Subscribe。
> mosquitto_sub --cafile c:¥mosquitto¥certs¥ca.crt --cert c:¥mosquitto¥certs¥client.crt --key c:¥mosquitto¥certs¥client.key -t test -p 8883
Windows 10(ホスト OS)へ Publish。
> mosquitto_pub --cafile c:¥mosquitto¥certs¥ca.crt --cert c:¥mosquitto¥certs¥client.crt --key c:¥mosquitto¥certs¥client.key -t test -p 8883 -m Message
Ubuntu 16.04 LTS(ゲスト OS)へ Subscribe。
> mosquitto_sub --cafile c:¥mosquitto¥certs¥UbuntuCA.crt --cert c:¥mosquitto¥certs¥UbuntuClient.crt --key c:¥mosquitto¥certs¥UbuntuClient.key --insecure -t test -p 8883 -h 192.168.56.101
Ubuntu 16.04 LTS(ゲスト OS)へ Publish。
> mosquitto_pub --cafile c:¥mosquitto¥certs¥UbuntuCA.crt --cert c:¥mosquitto¥certs¥UbuntuClient.crt --key c:¥mosquitto¥certs¥UbuntuClient.key --insecure -t test -p 8883 -h 192.168.56.101 -m Message
Ubuntu 16.04 LTS(ゲスト OS)で端末を起動します。
Ubuntu 16.04 LTS(ゲスト OS)へ Subscribe。
$ mosquitto_sub --cafile /etc/mosquitto/certs/ca.crt --cert /etc/mosquitto/certs/client.crt --key /etc/mosquitto/certs/client.key -t test -p 8883
Ubuntu 16.04 LTS(ゲスト OS)へ Publish。
$ mosquitto_pub --cafile /etc/mosquitto/certs/ca.crt --cert /etc/mosquitto/certs/client.crt --key /etc/mosquitto/certs/client.key -t test -p 8883 -m Message
Windows 10(ホスト OS)へ Subscribe。
$ mosquitto_sub --cafile /etc/mosquitto/certs/WindowsCA.crt --cert /etc/mosquitto/certs/WindowsClient.crt --key /etc/mosquitto/certs/WindowsClient.key --insecure -t test -p 8883 -h 192.168.56.1
Windows 10(ホスト OS)へ Publish。
$ mosquitto_pub --cafile /etc/mosquitto/certs/WindowsCA.crt --cert /etc/mosquitto/certs/WindowsClient.crt --key /etc/mosquitto/certs/WindowsClient.key --insecure -t test -p 8883 -h 192.168.56.1 -m Message
Ubuntu 16.04 LTS(ゲスト OS)側の mosquitto.conf に Bridge の設定を追加します。
https://mosquitto.org/
なお、Bridge に使用する証明書は、Windows 10(ホスト OS)で発行したクライアント証明書とします。
# Bridges
connection windows-bridge
address 192.168.56.1:8883
topic test both
# Certificate based SSL/TLS support
bridge_cafile /etc/mosquitto/certs/WindowsCA.crt
bridge_certfile /etc/mosquitto/certs/WindowsClient.crt
bridge_keyfile /etc/mosquitto/certs/WindowsClient.key
bridge_insecure true
Windows 10(ホスト OS)と Ubuntu 16.04 LTS(ゲスト OS)の両方で Subscribe します。そして、それぞれで Publish したときに、それぞれ両方でメッセージが出力されることを確認します。
Windows 10(ホスト OS)のコマンドプロンプトで Subscribe。
> mosquitto_sub --cafile c:¥mosquitto¥certs¥ca.crt -t test -p 8883
Ubuntu 16.04 LTS(ゲスト OS)の端末で Subscribe 。
$ mosquitto_sub --cafile /etc/mosquitto/certs/ca.crt -t test -p 8883
Windows 10(ホスト OS)で Publish。
> mosquitto_pub --cafile c:¥mosquitto¥certs¥ca.crt -t test -p 8883 -m MessageFromWindowsToBoth
Ubuntu 16.04 LTS(ゲスト OS)で Publish。
$ mosquitto_pub --cafile /etc/mosquitto/certs/ca.crt -t test -p 8883 -m MessageFromUbuntuToBoth