AWS IoTにRubyのMQTTクライアントから接続しようとすると「SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError)」になる
AWS IoTで証明書を作成し、これを使ってRubyのMQTTクライアントからAWS IoTに接続しようとするとエラーになる。
⦿ コード
$ vi mqtt.rb require 'rubygems' require 'mqtt' client = MQTT::Client.connect( host: 'xxxxxxxxxxxxxx-ats.iot.ap-northeast-1.amazonaws.com', port: 8883, ssl: true, cert_file: '<AWS IoTで作成した「このモノの証明書」>', key_file: '<AWS IoTで作成した「プライベートキー」>', ca_file: '<AWS IoTの「ルートCA ダウンロード」のページから取得したルートCA証明書>') :
⦿ 実行結果
$ ruby mqtt.rb : SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError)
これは既にレガシー扱いになったVeriSign発行のルートCA証明書を使っているからであり、Amazon Trust Services発行のルートCA証明書を使えば問題なく動作する。
・ 関連資料・記事
[Amazon Web Services] AWS IoTでMQTTブローカーを作りArduinoからのセンシングデータをSNS通知する手順
[Amazon Web Services] AWS IoTでMQTTブローカーを作りArduinoからのセンシングデータをSNS通知する手順(AWS CLI編)
参考サイト
- AWS IoT (Amazon Web Services)
- AWS IoT開発者ガイド (Amazon Web Services)
- loT – 特集カテゴリー (DevelopersIO)
- AWS IoT情報 (Qiita)