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

总的来说,我的问题是,我用于尝试连接的证书(巴尔的摩 Cyber​​Trust Root)是否是正确的证书,以及我没有设置的 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 回答