開発ブログがご無沙汰となっておりましたが、新型コロナウィルスに負けないように、イーツリーズとしてはリモートワーク体制で技術の仕込みを着々と行っております。
ところで、IoT関連ではMQTTが使われることが多いですね。MQTTは平文で通信されるので、セキュリティが欲しいところではMQTTSを使うことになります。
まずはMQTTを、ということで「pythonでMQTT送受信」を参考に動かしてみました。問題ないですね。
そして次にこれをSSL化します。SSLはOpenSSLとか入れなきゃいけないの?とか思いましたが、どうも標準でWindowsのSSLライブラリをPythonから使えるようです。環境はWindows10 Homeに、Python-3.8.1をインストールしています。
sample_sub.py, sample_pub.pyに、SSLのコンテキストを作って設定してあげるだけで行けました。
たとえば、sample_pub.pyのほうだと、import sslはしておくとして、
# メイン関数 この関数は末尾のif文から呼び出される def main(): ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) # SSL対応で追加 client = mqtt.Client() # クラスのインスタンス(実体)の作成 client.tls_set_context(context=ssl_context) # SSL対応で追加 client.on_connect = on_connect # 接続時のコールバック関数を登録 client.on_disconnect = on_disconnect # 切断時のコールバックを登録 client.on_publish = on_publish # メッセージ送信時のコールバック client.connect("localhost", 8883, 60) # 接続先は自分自身
のように、MQTTのクライアントを生成した後に、tls_set_contextするだけですね。
見た目はかわらないのであれですが、subscribe側はちゃんと受信できています。
ちなみに、MQTTSのサーバはmosquitto-1.6.8を使っています。
Let’s IoT !
(船田)
コメント