スマートフォン・タブレットからインターネットサーバーオペレーション 2014

APPW.jp 2014

Mosquitto へ SSL で接続してみる

Mosquitto の SSL 対応を試してみる」で SSL 対応しました。そこで作成したクライアント用のキーと証明書を使用して、今回は、クライアントからの接続を試みます。

これまでにいくつか Python で MQTT クライアントプログラムを作成していますが、これらを改造して利用します。

最初に「Mosquitto の payload を MongoDB に保存してみる」のプログラムです。

import os, sys
import time
from datetime import datetime
import paho.mqtt.client as paho

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../model')
from mchat import (connecter, ChatLog)

def on_connect(mosq, obj, rc):
    print("on connect [rc]:" + str(rc))

def on_message(mosq, obj, msg):
    now = int(time.mktime(datetime.now().timetuple()))
    ChatLog(text=msg.payload, user='MQTT', created_at=now).save() 
    print("on message [topic]:"+msg.topic + "  [qos]:" + str(msg.qos) + "  [payload]:" + str(msg.payload))

def on_publish(mosq, obj, mid):
    print("on publish [mid]:" + str(mid))

def on_subscribe(mosq, obj, mid, granted_qos):
    print("on subscribe [mid]:" + str(mid) + " [qos]:" + str(granted_qos))

def on_disconnect(mosq, obj, rc):
    print("on disconnect [rc]:" + str(rc))

def on_log(mosq, obj, level, string):
    print(string)

mqttc = paho.Client()

mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
mqttc.on_disconnect = on_disconnect

mqttc.username_pw_set("mqtt", "mqttpasswd")

ca_certs = "/etc/mosquitto/ca/ca.crt"
certfile = "/etc/mosquitto/tls/client.crt"
keyfile = "/etc/mosquitto/tls/client.key"
mqttc.tls_set(ca_certs, certfile, keyfile, cert_reqs=paho.ssl.CERT_REQUIRED, tls_version=paho.ssl.PROTOCOL_TLSv1, ciphers=None)
mqttc.connect("www.hoge.jp", 8883, 60)

connecter()

mqttc.subscribe("test/chat", 0)

mqttc.publish("test/chat", "conected mqtt subscribe")

mqttc.loop_forever()

続いて「Mosquitto Publish と Server-Sent Events で Python チャットサンプルを改造」の mqttc.py です。

import paho.mqtt.client as paho

def MQTTpub(msg):
    mqttc = paho.Client(client_id="gwclient", clean_session=True, protocol=paho.MQTTv311)
    mqttc.username_pw_set("mqtt", "mqttpasswd")

    ca_certs = "/etc/mosquitto/ca/ca.crt"
    certfile = "/etc/mosquitto/tls/client.crt"
    keyfile = "/etc/mosquitto/tls/client.key"
    mqttc.tls_set(ca_certs, certfile, keyfile, cert_reqs=paho.ssl.CERT_REQUIRED, tls_version=paho.ssl.PROTOCOL_TLSv1, ciphers=None)

    mqttc.connect("www.hoge.jp", 8883, 60)
    mqttc.publish("test/chat", msg, 0)
    mqttc.disconnect()

なお、使用している paho-mqtt パッケージは、SSL/TLS のサポートが Python 2.7 からとなっているようです。

わたしの環境は、CentOS 6.5、Python 2.6.6 ですので、Python 2.7 を追加しなければ確認できませんでした。

とりあえず確認するために、この記事時点で最新バージョンの Python 2.7.8 を追加しました。

インストール先です。

mkdir /opt/local
cd /opt/local

Development tools をインストールします。

yum groupinstall "Development tools"
yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-deve

Python 2.7.8 をダウンロードします。

curl -O https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
tar zxf Python-2.7.8.tgz

Python 2.7.8 をインストールします。

cd Python-2.7.8
./configure --prefix=/opt/local
make && make altinstall

easy_install をインストールします。

curl -O http://python-distribute.org/distribute_setup.py
/opt/local/bin/python2.7 ./distribute_setup.py

virtualenv をインストールします。

/opt/local/bin/easy_install-2.7 virtualenv

easy_install-2.7 を使用して必要なパッケージをすべてインストールします。

easy_install-2.7 gevent bottle pytz mongoengine paho-mqtt supervisor

そして、python2.7 で実行します。

Screenshot_2014-07-31-10-38-02~01

 

「さくらのVPS」2014年11月27日にリニューアル

SSL ボックス が SHA-2 の SSL 証明書発行に対応

Bottle – Cork サンプルを Apache mod_wsgi で試してみます

Mosquitto の Bridge を SSL で試します

Mosquitto の SSL 対応を試してみる

Mosquitto Publish と Server-Sent Events で Python チャットサンプルを改造

Python WebSocket のチャットサンプルに、MongoDB 保存を付け加えました

MongoDB に保存した Mosquitto の payload を Server-Sent Events で表示してみる

Mosquitto の payload を MongoDB に保存してみる

Mosquitto を VPN で試しました

via IPv4

カテゴリー