由于证书错误,与 Azure Iot Hub 的 SSL 握手失败

SSL Handshake with Azure Iot Hub Fails Because of Bad Certificate

我正在尝试将 azure-iot-sdk-c 移植到 stm32f767zi 板上,并取得了一定的成功。但是,现在该程序正在尝试与服务器 mbedtls 进行 SSL 握手,但无法验证我针对服务器证书提供的证书。日志行是:

x509_verify_cert() returned -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 工作正常,我只能相信我提供的证书或我的配置之一是错误的,但我对 mbedtls/ssl 了解不够图知道我应该使用哪个configuration/certificate。

总的来说,我的问题是,我用来尝试连接(巴尔的摩 Cyber​​Trust Root)的证书是否是正确的证书,mbedtls 中是否有任何我没有设置的明显设置?

您应该查看 Azure IoT SDK 中的文件 certs.c。在那里你会找到受信任的证书。使用关键字 OPTION_TRUSTED_CERT 将它们传递给 SDK 中的 SetOption。请参阅存储库中的示例 iothub_convenience_sample。它演示了这个过程。请注意,它传递了 链中的所有证书。

我已经成功地使用 MbedTLS 通过这种技术验证了服务器证书。但是,请确保您最近克隆了 SDK。 MbedTLS 适配器最近有一个修复程序。我不记得它是否会影响这种情况,但最好是安全的。