

下記のサイトを参考にSPRESENSE SDKにあるLTE Azure-IoT サンプルアプリケーションを行っています。

<https://developer.sony.com/develop/spresense/docs/sdk_tutorials_ja.html>

azure側でAzure IoT Hub名 及びIoT デバイス名 と、プライマリ対象共有アクセスキー
を生成してsdカードのazureiotに保存を行い、CERTS ディレクトリにportal-azure-com.pemも同様に保存しています。

しかし、コマンドに `lte_azureiot send "ss"` を打つ以下のような結果となり、失敗してしまいます。  
原因や解決策がわかる方が居ましたら、是非教えていただきたいです。

[code]

    LTE connect...
    LTE connect...OK
    
    Device message: ss --> Cloud
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() retry
    mbedtls_ssl_handshake() fail
    Fail: Connect
    
    LTE disconnect...
    lte_radio_off
    lte_power_off
    lte_finalize
    LTE disconnect...OK
    
[/code]


CC BY-SA 4.0
2022-08-01T15:25:31.843
90316
2023-06-05T01:41:31.790
2022-08-03T02:29:46.887
3060
53775
question
spresense
SPRESENSEでazureにデータを投稿しようとする際、mbedtls_ssl_handshake() failとエラーが出る


こんにちは。

コマンドの実行結果を見る限り、SSLのハンドシェイクに失敗しているようです。  
SSLのハンドシェイクでは、指定した証明書が正しいものかを確認しているのでおそらくこれに失敗しているのではないかと思われます。

以下のサイトを参照の上、再度証明書 portal-azure-com.pem を作り直してみてはいかがでしょうか。  
<https://developer.sony.com/develop/spresense/docs/sdk_tutorials_ja.html#_%E6%8E%A5%E7%B6%9A%E7%94%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90>

注意点は、このサンプルでは `Baltimore CyberTrust Root` を使わなければいけないので、「5. Baltimore
CyberTrust Root から PEM (証明書) をクリックし portal-azure-com.pem
をダウンロードします。」の手順通り、`Baltimore CyberTrust Root`タブの中からダウンロードする必要があるようです。

参考になれば幸いです。

_2022/8/8 追記_

今はAzureIoTサンプルで接続するサーバで使用する証明書 `https://portal.azure.com/`
で使用している証明書が別々のものになってしまったようです。  
`lte_azureiot` のソースコードを見ると `https://<IoT Hub Name>.azure-devices.net`
に接続しに行っているようです。  
この証明書(`Baltimore CyberTrust Root`)を同じようにダウンロードし、 `portal-azure-com.pem`
という名前にリネームした後SDカードのCERTSディレクトリにコピーするとサンプルが正しく動きます。(試しに自分のアカウントで試したら正しく動きました。)  
`<IoT Hub Name>` は `resources.txt` で記載した名前と同一です。

_2023/6/5 追記_

SDK3.0.0で証明書がコードに埋め込まれるようになり、こちらのバージョンにアップデートすると証明書を別途ダウンロードする必要がなくなりました。  
[Spresense SDK
v3.0.0リリースノート](https://github.com/sonydevworld/spresense/releases/tag/v3.0.0)

[code]

    [Examples: lte_azureiot] lte_azureiot サンプルで使用するTLS証明書をコードに埋め込みました。 (Thanks to @takumiando)
    
[/code]


CC BY-SA 4.0
2022-08-03T02:25:17.217
90348
2023-06-05T01:41:31.790
2023-06-05T01:41:31.790
32034
32034
90316
answer