share facebook facebook twitter menu hatena pocket slack

2019.10.23 WED

AWS IoTにRubyのMQTTクライアントから接続しようとすると「SSL_connect returned=1 errno=0 stat…

木檜 和明

WRITTEN BY 木檜 和明

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にRubyのMQTTクライアントから接続しようとすると「SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError)」になる

木檜 和明

木檜 和明

遠くのクラウドと手元のIoTデバイス、両エッジをつないだものづくりがしたいと妄想中。Arduinoのコミュニテイやってます。

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。