0

私は azure-iot-sdk-c を stm32f767zi ボードに移植しようとしていますが、ある程度の成功を収めています。ただし、プログラムがサーバー mbedtls との SSL ハンドシェイクを試行している時点で、サーバー証明書に対して提供した証明書の検証に失敗しています。ログ行は次のとおりです。

x509_verify_cert() は -9984 (-0x2700) を返しました

これは MBEDTLS_ERR_X509_CERT_VERIFY_FAILED エラーに変換されます

さまざまな証明書 (Baltimore Cyber​​Trust Root、Microsoft IT TLS CA 1、検証のために送信される証明書を使用) を提供しようとしましたが、それらはすべて同じエラーで失敗します。

エラーで失敗する mbedtls ライブラリから、失敗を mbedtls_rsa_rsassa_pkcs1_v15_verify() に絞り込みました。

MBEDTLS_ERR_RSA_INVALID_PADDING

LwIP と mbedtls が正しく機能していると想定しているため、提供している証明書または構成の 1 つが間違っていると信じるしかありませんが、mbedtls/ssl について十分に理解していないため、どの構成/証明書を使用しているかを把握できません。使用する必要があります。

全体的な私の質問は、接続しようとしていた証明書 (ボルチモア サイバートラスト ルート) を使用するのに適切な証明書であるか、mbedtls に設定していない明白な設定があるかということです。

4

1 に答える 1

0

Azure IoT SDK の certs.c ファイルを確認してください。そこには、信頼できる証明書があります。キーワード OPTION_TRUSTED_CERT を使用して、これらを SDK の SetOption に渡します。リポジトリのサンプル iothub_convenience_sample を参照してください。このプロセスを示します。チェーン内のすべての証明書を渡すことに注意してください。

この手法を使用して、MbedTLS を使用してサーバー証明書を検証することに成功しました。ただし、最近 SDK をクローンしたことを確認してください。最近、MbedTLS アダプターに修正が加えられました。それがこのシナリオに影響を与えるかどうかは覚えていませんが、安全を確保するのが最善です.

于 2019-03-12T18:52:22.303 に答える