Сбой SSL-рукопожатия с Azure Iot Hub из-за неверного сертификата - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь перенести azure-iot-sdk-c на плату stm32f767zi и добился небольшого успеха.Однако теперь, когда программа пытается установить рукопожатие SSL с сервером, mbedtls не может проверить сертификат, который я предоставил для сертификата сервера.Строка журнала:

x509_verify_cert () вернула -9984 (-0x2700)

, что означает ошибку MBEDTLS_ERR_X509_CERT_VERIFY_FAILED

Я пробовал по-другомупредоставление разных сертификатов (Baltimore CyberTrust Root, Microsoft IT TLS CA 1, с использованием сертификата, который отправляется для проверки), но все они терпят неудачу с одной и той же ошибкой.

Я сузил ошибку до mbedtls_rsa_rsassa_pkcs1_v15_verify () из библиотеки mbedtls, которая завершается с ошибкой:

MBEDTLS_ERR_RSA_INVALID_PADDING

* 1016LwIP и mbedtls работают правильно, мне остается верить, что сертификат, который я предоставляю, или одна из моих конфигураций неверны, но я не знаю достаточно о mbedtls / ssl, чтобы понять, какую конфигурацию / сертификат я должен использовать.

В целом мой вопрос будет, является ли сертификат, который я использовал для попытки подключения (Baltimore CyberTrust Root), правильным сертификатом для использования, и есть ли какие-либо очевидные настройки в mbedtls, которые я не устанавливал?

1 Ответ

0 голосов
/ 12 марта 2019

Вы должны посмотреть файл certs.c в Azure IoT SDK.Там вы найдете доверенные сертификаты.Передайте их в SetOption в SDK, используя ключевое слово OPTION_TRUSTED_CERT.Смотрите пример iothub_convenience_sample в репозитории.Это демонстрирует этот процесс.Обратите внимание, что он передает все сертификаты в цепочке.

Я успешно использовал MbedTLS для проверки сертификата сервера с использованием этого метода.Однако убедитесь, что вы недавно клонировали SDK.Недавно было исправлено в адаптере MbedTLS.Я не помню, повлияет ли это на этот сценарий, но лучше быть в безопасности.

...