Неправильно сформированный сертификат 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
и он сообщит все, что вы хотите знать о сертификате.