Неправильно сформированный сертификат pem, используемый при запуске iothub_client_sample_http

Я портировал iothub_client_sample_http так, чтобы он использовал Mbed v5.x и mbedtls, а не Mbed v2.0 и wolfSSL.

Он компилируется нормально, но при запуске mbedtls (точнее, mbedtls_x509_crt_parse) сообщает, что сертификатом в примере программы является "Info: Malformed pem Certificate".

Есть ли простой способ это исправить?

Я подозреваю, что поскольку исходной библиотекой TLS является wolfSSL, возможно, она использует более старую версию сертификата (??, может быть, версию 1 или 2) и что библиотека mbedtls хочет получить сертификат версии 3?

Я бы надеялся, что простая компиляция с последней версией mbed os и mbedtls дала бы те же результаты (так много для надежды).

1 ответ

Ответ на эту проблему был фактически двойным:

1) сообщенная ошибка Info: Malformed pem certificate что-то вроде красной селедки, после ее дальнейшего изучения реальная проблема заключалась в том, что mbedtls бросал MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ошибка.

2) MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG означает, что mbedtls не распознает алгоритмы подписи сертификатов. Когда вы сбрасываете сертификат, он, как сообщается, подписан с sha1WithRSAEncryption, RSA с SHA1 считается слабым набором шифров, и по умолчанию он отключен в mbedtls, поэтому необходимо изменить файл config.h mbedtls и перекомпилировать библиотеку, чтобы он правильно распознал сертификат.

Как только это было сделано, сертификаты проходят, как и ожидалось. Если вы хотите проверить свои сертификаты, выполните команду

openssl x509 -in certificate.crt -noout -text

и он сообщит все, что вы хотите знать о сертификате.

Другие вопросы по тегам