Armadilloフォーラム

「SE050 を使用して AWS IoT Core へ接続する」で TLS handshake failed. エラー

tsydc

2021年11月12日 18時40分

お世話になります。

下記URLのHOWTO手順を実施しております。
SE050 ミドルウェア (Plug&Trust MW) ビルド手順
https://armadillo.atmark-techno.com/howto/aiot_g3m1-se050-build_middle_…
SE050 を使用して AWS IoT Core へ接続する
https://armadillo.atmark-techno.com/howto/aiot_g3m1-se050-demo_connect_…

一通り実施したのですが、最後の「デモ実行」にてエラーが発生してしまいます。
原因や解決方法についてご助言・ご助力をいただけないでしょうか。

【環境】
Armadillo P/N:AGX3140-D00Z
ATDE8:v20210913
Debian GNU/Linux 10 (buster) イメージファイル:v20211018
SIM:docomo(APN:mopera.net)

【エラーの事象】
iot_demo_mqttを実行すると「TLS handshake failed.」が発生します。
実行時のエラーは以下のとおりです。(xxx…は伏せ字です)

root@armadillo:~/simw-top/demos/linux/aws_eou/aws-iot-device-sdk-embedded-C/build/output/bin# ./iot_demo_mqtt -i "my_armadillo001" -h "xxxxxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com" -r AmazonRootCA1.pem -c se050_device_cert0_ecc.cer -k se050_device_key_ref0_ecc.pem
[INFO ][INIT][2021-11-12 17:18:05] SDK successfully initialized.
[INFO ][NET][2021-11-12 17:18:05] Network library initialized.
[INFO ][MQTT][2021-11-12 17:18:05] MQTT library successfully initialized.
[INFO ][DEMO][2021-11-12 17:18:05] MQTT demo client identifier is my_armadillo001 (length 15).
[INFO ][NET][2021-11-12 17:18:05] TCP connection successful.
[INFO ][NET][2021-11-12 17:18:05] Setting up TLS.
[INFO ][NET][2021-11-12 17:18:05] Successfully imported root CA.
[INFO ][NET][2021-11-12 17:18:05] Successfully imported client certificate.
[INFO ][NET][2021-11-12 17:18:05] Successfully imported client certificate private key.
[ERROR][NET][2021-11-12 17:18:06] TLS handshake failed.
[ERROR][MQTT][2021-11-12 17:18:06] Failed to create network connection: 4
[ERROR][MQTT][2021-11-12 17:18:06] Failed to establish new MQTT connection, error NETWORK ERROR.
[ERROR][DEMO][2021-11-12 17:18:06] MQTT CONNECT returned error NETWORK ERROR.
[INFO ][MQTT][2021-11-12 17:18:06] MQTT library cleanup done.
[INFO ][NET][2021-11-12 17:18:06] Network library cleanup done.
[INFO ][INIT][2021-11-12 17:18:06] SDK cleanup done.
[ERROR][DEMO][2021-11-12 17:18:06] Error occurred while running demo.

【AWSの状態】
・安全性→ポリシー画面では、手順により作成されているポリシー「my_test_policy」に対して
 同じく手順により取得した証明書がアタッチされています。
・上記の証明書を参照すると、発行者/件名/作成日/発行日/有効期限日が表示されており、
 有効期限は十分にあります。(2032年)
・手順により作成されているモノ「my_armadillo001」に対して、上記の証明書はアタッチされていません。

【手順の変更点について】
「SE050 を使用して AWS IoT Core へ接続する」の手順をそのまま実行すると
うまくいかない点などがあったため、下記について変更して実施しています。
・「/etc/apt/sources.list」の編集なし
 deb http://download.atmark-techno.com/debian/ stretch main contrib non-free
 理由:buster最新イメージ適用により(?)、上記行の「stretch」が「buster」となっていた為。
・ssscliインストールの手順にある一部パッケージ名の変更
 「apt install python3-pip3」→「apt install python3-pip」へ変更した。
 理由:パッケージが見つからない為
・SE050から証明書を取り出す際のconnectコマンドのパラメータ変更
 「ssscli connect se050 t1oi2c /dev/i2c-3:0x48」
  →「ssscli connect se05x t1oi2c /dev/i2c-3:0x48」へ変更した。
 理由:se05xを使えと警告が出る為
・AWSのIAMユーザに対してアタッチするポリシーの追加
 「AWSIoTConfigAccess」の他に「AWSIoTFullAccess」を追加した。
 理由:証明書をAWS IoT Coreへ登録するコマンドで、権限不足によるエラーが発生する為。
 該当コマンド:
  aws iot register-certificate-without-ca --certificate-pem file://se050_device_cert0_ecc.cer --status ACTIVE
 エラー内容:
  An error occurred (AccessDeniedException) when calling the RegisterCertificateWithoutCA operation:
   User: arn:aws:iam::xxxxxxxxxxxx:user/xxxxxxxxxx is not authorized
   to perform: iot:RegisterCertificateWithoutCA on resource: *
   because no identity-based policy allows the iot:RegisterCertificateWithoutCA action

その他、解析に必要なログなどがあればご提示致します。
よろしくお願い致します。

コメント

at_mitsuhiro.yoshida

2021年11月18日 18時13分

吉田です。

ご指摘ありがとうございます。
>  「apt install python3-pip3」→「apt install python3-pip」へ変更した
本件に関して Howto を修正したしました。

それ以外に関しては、動作検証同時の情報となりますので、
今後更新をしていきたいと思います。

Armadillo-IoT ゲートウェイ A6 にて実施した Howto がありまして、
こちらが 2021 年 7 月に実施したものになりますので、
こちらの方が新しい情報となりますので、参考になれば幸いです。
https://armadillo.atmark-techno.com/howto/aiot_a6-se050-demo_connect_aw…

エラーに関しては、
ネットワークにファイアーウォールの設定などがないかの確認と、
手順に関して再度確認いただければと思います。
上手くいかない場合には、コマンドのログを添付してもらえますと確認出来ることがあるかもしれません。

tsydc

2021年11月26日 20時25分

吉田様

ご回答ありがとうございます。
ご紹介いただいたArmadillo-IoT ゲートウェイ A6のHowtoも参照させていただきましたが、
手順としては同等かと思いますので、解決できませんでした。

2台で確認を行っておりますが、同じ状況です。
また、SIMを使用せずEthernetからいくつかのネットワーク経路で試していますが、
状況は変わりませんでした。

その他、調査として以下を行っておりますが、その内容から原因を推定することはできますでしょうか?

1. デモアプリのDEBUGログ出力
 SDKソースコードにて、LIBRARY_LOG_LEVELをIOT_LOG_DEBUGに設定してビルドした
 iot_demo_mqttを実行し、ログ出力をする。
 ⇒ログ出力結果を添付しております。
  過去に実施したときのものですが、ログ内容自体としては現状も同じです。

2. 他のデバイス証明書を使用すると通信成功する
 AWS IoTコンソールにて新たにモノを作成します。
 その手順におけるデバイス証明書を設定する画面にて
 「今回の証明書の作成をスキップ」を選択せず、「新しい証明書を自動生成」を選択しました。
 ポリシーはHowtoで作成済みのものをアタッチし、最後にデバイス証明書とプライベートキーをダウンロードします。
 このデバイス証明書とプライベートキーを使ってiot_demo_mqttを実行すると、エラーは発生せず処理に成功します。

上記の結果を考えると、SE050の証明書に何か問題があるとか、証明書に関しての設定・構成不足があるとか、
そのような気がしています。

貴社では、今も以前と変わらず成功しますでしょうか?
他に確認ポイントがあるようでしたらご教示いただければ幸いです。

ファイル ファイルの説明
iot_demo_mqtt_debugログ追加.txt デモアプリのDEBUGログ出力

at_mitsuhiro.yoshida

2021年12月2日 15時15分

吉田です。

お手数おかけしております。

ビルド手順の中で、
https://armadillo.atmark-techno.com/howto/aiot_g3m1-se050-build_middle_…

ビルドの実施

# cd ~/simw-top
root@armadillo:~/simw-top# python scripts/create_cmake_projects.py
root@armadillo:~/simw-top# cd ../simw-top_build/imx_native_se050_t1oi2c_openssl_el2go/
root@armadillo:~/simw-top_build/imx_native_se050_t1oi2c_openssl_el2go# cmake --build .

の後に、

root@armadillo:~/simw-top_build/imx_native_se050_t1oi2c_openssl_el2go# make install
root@armadillo:~/simw-top_build/imx_native_se050_t1oi2c_openssl_el2go# ldconfig /usr/local/lib

を追加して試していただけますでしょうか。

tsydc

2021年12月2日 20時04分

吉田様

情報をご提供いただき、ありがとうございます。
ご教示いただきました点について確認したところ、正常にデモアプリが処理されることが確認できました。
ベースとなるNXP社の解説ページも見ていたつもりでしたが、差分があることを見落としておりました。

2点ほど、質問させていただきます。
範疇を超える点もあるかもしれませんが、もしお分かりになるようでしたら
ご教示いただければ大変助かります。

1.
不足していたコマンドの実行有無によって、デモアプリ実行時に
変化のある(影響される)点がどこなのか、ご教示いただけないでしょうか?
取り出した証明書とキーは、比較する限り変わりないようです。

2.
SE050から予めプロビジョニングされたデバイス証明書とプライベートキーを取り出す際に
指定するキー識別子は「0xF0000101」「0xF0000100」とHowtoで記載されています。これは、
https://www.nxp.com/docs/en/application-note/AN12436.pdf
上記資料の表8で「Cloud Connectivity Certificate 0, ECC signed」の証明書に該当すると理解しました。

一方、下記の投稿では、今後SE050C1からSE050A1へ変更する可能性があると記載されています。
https://armadillo.atmark-techno.com/forum/armadillo/7756

SE050A1へ変更となった場合、AN12436.pdf資料の表6における「Connectivity Certificate 0」
を取得(キー識別子「0xF0000001」「0xF0000000」)することが同等になりますでしょうか?

Cの方は「Cloud Connectivity Certificate…」のように「Cloud」と表記されていますが、
Aの方には「Cloud」の表記がありません。
SE050A1へと変更になった場合、この証明書によるAWS IoTへの接続可否を知りたいです。

at_koseki

2021年12月2日 20時13分

古関です。

> 一方、下記の投稿では、今後SE050C1からSE050A1へ変更する可能性があると記載されています。
> https://armadillo.atmark-techno.com/forum/armadillo/7756

その後の検討の結果、SE050C1のまま継続することを決定しました。
混乱・ご心配させてしまい申し訳ありません。

at_mitsuhiro.yoshida

2021年12月3日 8時51分

吉田です。

> 1.
> 不足していたコマンドの実行有無によって、デモアプリ実行時に
> 変化のある(影響される)点がどこなのか、ご教示いただけないでしょうか?
> 取り出した証明書とキーは、比較する限り変わりないようです。

提供されているライブラリのバージョンが上がった際に、スクリプトなどが変更になっていたと思われます。
特定のディレクトリへインストールしているだけですので影響ありません。

sshida

2021年11月30日 16時49分

tsydc 様

> 【AWSの状態】
> 手順により作成されているモノ「my_armadillo001」に対して、上記の証明書はアタッチされていません。

SE050 から取り出したクライアント証明書 (以下、証明書)をAWS IoTに登録し、証明書にポリシーをアタッチしたあと、証明書をモノにアタッチする必要もあります。

AWSマネージメントコンソールの IoTを表示して、モノ→証明書→ポリシーの順で対応付を確認するとよいです。

tsydc

2021年12月1日 8時41分

sshida 様

> SE050 から取り出したクライアント証明書 (以下、証明書)をAWS IoTに登録し、証明書にポリシーをアタッチしたあと、証明書をモノにアタッチする必要もあります。
> AWSマネージメントコンソールの IoTを表示して、モノ→証明書→ポリシーの順で対応付を確認するとよいです。

AWSコンソールにて、モノに対して証明書をアタッチしてみました。
モノ・証明書・ポリシーがアタッチされている状態となりましたが
この状態でも同エラーが起きる状態は変わりありませんでした。

ご助言いただき、ありがとうございます。
他に何かお気づきのことがあればご教示いただければ幸いです。