本日はPahoを使用して証明書の検証をしないでMQTTブローカーと接続する際のコードの書き方についてご説明します。
あまり多くないケースなのか記事が見つからなかったため同じことを行いたい方は是非参考にしてください。
また、他にも普段の生活で役立つテクニックをご紹介していますので興味のある方は以下のリンクからご覧ください。
コードの変更点
tls_set関数の引数でcert_reqs=ssl.CERT_NONEを指定する
コードの1つ目の変更箇所はconnect処理時に使用するtls_set関数の引数にcert_reqs=ssl.CERT_NONEを指定することです。
tls_set関数はmqttのclientを作成してからconnect処理を呼び出すまでの間で実行してください。
TLS接続用にコードを書いていた方は既に関数を使用していると思うので引数にcert_reqsパラメータを追加してあげてください。
import ssl
client = mqtt_client.Client(client_id)
client.tls_set(cert_reqs=ssl.CERT_NONE)
tls_insecure_set関数をTrueで呼び出す
2つめの変更箇所はtls_insecure_set関数をTrueで呼び出すことです。
tls_set関数を呼び出してからconnect処理をまでの間に呼び出すようにしてください。
この2つの処理を記載することで証明書検証を行わずMQTTブローカーに接続することができます。
client = mqtt_client.Client(client_id)
client.tls_insecure_set(True)
コードの全体像
実際に処理を記載した際のコードの全体像のイメージは以下になります。
from paho.mqtt import client as mqtt_client
import ssl
broker = 'ip_adress or domain'
port = 1883
topic = "specify your mqtt topic"
client_id = 'write any value: hogehoge'
def connect_mqtt():
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connect Success")
else:
print(f"Connect Failed, return code {rc}\n")
引数直す
client = mqtt_client.Client(client_id)
# tls_set関数の引数でcert_reqs=ssl.CERT_NONEを指定
client.tls_set(cert_reqs=ssl.CERT_NONE)
# tls_insecure_set関数をTrueで呼び出し
client.tls_insecure_set(True)
client.on_connect = on_connect
client.connect(broker, port)
return client
def publish(client, message):
result = client.publish(topic, message)
def run():
client = connect_mqtt()
client.loop_start()
message = "hogehoge"
publish(client, message)
if __name__ == '__main__':
run()
まとめ
Pahoで証明書を使用しないでSSL通信をする際はtls_set関数の引数にcert_reqs=ssl.CERT_NONEを指定し、tls_insecure_set関数をTrueにすることで通信が可能になります。
また、他にも普段の生活で役立つテクニックをご紹介していますので興味のある方は以下のリンクからご覧ください。
コメント