2017/01/14

AzureでMQTT brokerを立てようとする (2)

AzureでIoT hubを立てるところまでできたのだが、デバイスの登録で止まっている。
ツールをインストールしたり、アプリを作ったりすれば登録できるようなのだが、もっと手軽にやりたい。
そもそも、Azureの設定画面にログインしてるのだから、そこからできるようにしてないのは需要がないからだろうか?

 

わからない。。。
敗北感が強いが、DeviceExplorerを使おう。

Releases · Azure/azure-iot-sdks
DeviceExplorerというツールは、今はここにあるようだ。

ツールの使い方は、こちらが詳しい。
Azure IoT Hubを使ってみた - Qiita
リンク先がいろいろ変わったようだが、元の情報はこれかな?
azure-iot-sdk-csharp/tools/DeviceExplorer at master · Azure/azure-iot-sdk-csharp

今のツールは、この画面からSASトークンも作ることができるようだ。

image

試しに、mqtt1というデバイスIDを登録し、SASトークンを作ってみた。
これ、Generateを押すたびに作ってくれるのだけど、一番最後のsigとseだけが変わっているようだ。

image

 

これで、ここに書かれている情報は揃ったことになる。
MQTT プロトコルの直接使用

が、パスワードがわからん。
SASトークンを使うらしい。

SharedAccessSignature sig={signature-string}&se={expiry}&sr={URL-encoded-resourceURI}

日本語だと表示が変な気がしたので、英語版を見てみた。
Using the MQTT protocol directly

ちょっと内容が違う・・・。

  • ClientId = deviceId
  • Username = {iothubhostname}/{device_id}/api-version=2016-11-14
  • Password : SAS token

それに、SharedAccessSignatureがsig, se, srの順で書いてあるけど、下に書いてある説明ではsr, sig, seの順だ。
SAS Tokenで生成したものもその順になっているから、そっちが正しいのだろう。

ESP8266, Arduino & Azure IoT Hub
こちらは、ESP8266でつないだときのことが書かれていた。
ポートは8883でTLS接続、ClientIdはデバイスIDで、UserNameはapi-versionが無く、Passwordは"SharedAccessSignature"で始まる文字列になっている。

 

お、WindowsのMQTTクライアントで接続できた!
api-versionは付けている。
スマホのMQTTクライアントは接続できないな。。。何が違うのか。。。

 

pythonのpaho.mqttでやってみると、TLS接続のハンドシェイクで失敗しているようだ。

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

ここにあった、一番下のCERTをファイルにしてみたが、ダメだった。
https://docs.microsoft.com/ja-jp/azure/app-service-web/java-create-azure-website-using-java-sdk#create-a-certificate

keytoolでcertファイルを作って試したが、やっぱりダメ。
作ったcertファイルをAzureに登録するような操作がいるのだろうか?

動いているMQTTクライアント(MQTTBoxというストアアプリ)は、ストアアプリだからAzureと相性が良さそうだしなぁ、などと勘ぐってしまう。
TLSはv1でもv1.2でも接続できるから、あとはCertificate Typeくらいか。
アプリの設定は「CA signed server certificate」というやつにしたのだが(これ以外だとファイルの指定がいるから)、これが何をしているのか分かればなぁ。

うーん、今回はここまで。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。