Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: разбираюсь с mbedTLS
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Ruslan1
Здравствуйте!

были похожие темы, но вопросы у меня скорее начального уровня, да и разные, сложно позиционировать в нужную тему.
https://electronix.ru/forum/index.php?showtopic=143095
https://electronix.ru/forum/index.php?showtopic=124690


сейчас цель- изменить имеющийся и работающий SMTP для отсылки е-мейлов через SSL/TLS порты
в будущем- быть готовым к FTPS и HTTPS.

Вроде в программировании не новичок, но никогда не сталкивался с SSL/TLS и с mbedTLS.

Пока что непонятно по сертификатам:

1. встроенные в файл "mbedTLS\library\certs.c" сертификаты рабочие ? Или что я делаю не так?

у меня:

Код
const char mbedtls_test_cas_pem[] = TEST_CA_CRT_RSA TEST_CA_CRT_EC;

проверяю командой
        ret = mbedtls_x509_crt_parse( &cacert, (const unsigned char *) mbedtls_test_cas_pem,
                              mbedtls_test_cas_pem_len );

Получаю ошибку "MBEDTLS_ERR_PK_INVALID_PUBKEY" при парсинге первого сертификата TEST_CA_CRT_RSA (описание ошибки: The pubkey tag or value is invalid (only RSA and EC are supported)

проверка второго сертификата (TEST_CA_CRT_EC) проходит без ошибок.

собственно, сами сертификаты:
CODE
#define TEST_CA_CRT_RSA \
"-----BEGIN CERTIFICATE-----\r\n" \
"MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" \
"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" \
"MTEwMjEyMTQ0NDAwWhcNMjEwMjEyMTQ0NDAwWjA7MQswCQYDVQQGEwJOTDERMA8G\r\n" \
"A1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G\r\n" \
"CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx\r\n" \
"mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny\r\n" \
"50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n\r\n" \
"YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL\r\n" \
"R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu\r\n" \
"KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj\r\n" \
"gZUwgZIwDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUtFrkpbPe0lL2udWmlQ/rPrzH\r\n" \
"/f8wYwYDVR0jBFwwWoAUtFrkpbPe0lL2udWmlQ/rPrzH/f+hP6Q9MDsxCzAJBgNV\r\n" \
"BAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEZMBcGA1UEAxMQUG9sYXJTU0wgVGVz\r\n" \
"dCBDQYIBADANBgkqhkiG9w0BAQUFAAOCAQEAuP1U2ABUkIslsCfdlc2i94QHHYeJ\r\n" \
"SsR4EdgHtdciUI5I62J6Mom+Y0dT/7a+8S6MVMCZP6C5NyNyXw1GWY/YR82XTJ8H\r\n" \
"DBJiCTok5DbZ6SzaONBzdWHXwWwmi5vg1dxn7YxrM9d0IjxM27WNKs4sDQhZBQkF\r\n" \
"pjmfs2cb4oPl4Y9T9meTx/lvdkRYEug61Jfn6cA+qHpyPYdTH+UshITnmp5/Ztkf\r\n" \
"m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ\r\n" \
"7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA==\r\n" \
"-----END CERTIFICATE-----\r\n"


#define TEST_CA_CRT_EC \
"-----BEGIN CERTIFICATE-----\r\n" \
"MIICUjCCAdegAwIBAgIJAMFD4n5iQ8zoMAoGCCqGSM49BAMCMD4xCzAJBgNVBAYT\r\n" \
"Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF\r\n" \
"QyBDQTAeFw0xMzA5MjQxNTQ5NDhaFw0yMzA5MjIxNTQ5NDhaMD4xCzAJBgNVBAYT\r\n" \
"Ak5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBF\r\n" \
"QyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMPaKzRBN1gvh1b+/Im6KUNLTuBu\r\n" \
"ww5XUzM5WNRStJGVOQsj318XJGJI/BqVKc4sLYfCiFKAr9ZqqyHduNMcbli4yuiy\r\n" \
"aY7zQa0pw7RfdadHb9UZKVVpmlM7ILRmFmAzHqOBoDCBnTAdBgNVHQ4EFgQUnW0g\r\n" \
"JEkBPyvLeLUZvH4kydv7NnwwbgYDVR0jBGcwZYAUnW0gJEkBPyvLeLUZvH4kydv7\r\n" \
"NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xhclNTTDEcMBoGA1UE\r\n" \
"AxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAwGA1UdEwQFMAMBAf8w\r\n" \
"CgYIKoZIzj0EAwIDaQAwZgIxAMO0YnNWKJUAfXgSJtJxexn4ipg+kv4znuR50v56\r\n" \
"t4d0PCu412mUC6Nnd7izvtE2MgIxAP1nnJQjZ8BWukszFQDG48wxCCyci9qpdSMv\r\n" \
"uCjn8pwUOkABXK8Mss90fzCfCEOtIA==\r\n" \
"-----END CERTIFICATE-----\r\n"



2. Хочу читать файлы сертификатов с диска, у меня FatFS.
Оказывается, mbedTLS использует в исходниках вызовы fopen, fgets и так далее, а мне нужно вызывать функции из FatFS- f_open и прочие.
Мне что, нужно напрямую менять все вызовы в исходниках mbedTLS, или есть какой-то более красивый способ, чтоб при вызове fopen() на самом деле вызывалась моя функция f_open() ?
mantech
Цитата(Ruslan1 @ Nov 2 2017, 17:11) *
Мне что, нужно напрямую менять все вызовы в исходниках mbedTLS, или есть какой-то более красивый способ, чтоб при вызове fopen() на самом деле вызывалась моя функция f_open() ?


define-обертки не использовали никогда??

Например #define fopen(params...) f_open(params...)
Ruslan1
Цитата(mantech @ Nov 2 2017, 16:17) *
define-обертки не использовали никогда??

Например #define fopen(params...) f_open(params...)

Хм. никогда не переопределял функцию, уже имеющуюся под тем же названием в стандартной либе. (в данном случае <stdio.h>)
Спасибо! вроде этот вопрос закрыл. sm.gif

Upd: простыми редефайнами на функции FatFS мало где получается все эти fxxx заменить, пришлось свои писать. То есть что-то вроде "#define fopen my_fopen" для большинства вызовов пришлось всунуть.

кстати, чем "define xxx yyy" отличается от "define xxx(...) yyy(...)"?
показывает компилятору что это функция?
Ruslan1
MBEDTLS_ERR_PK_INVALID_PUBKEY поборол.
Ошибка в конфиге была:
Пытался использовать сертификат с ключом (2048 бит) длинной больше чем указано в MBEDTLS_MPI_MAX_SIZE (задается в байтах).

вызовы у функций работы с файлами в FatFS другие, и форматы данных и ключи другие. Чтоб не множить сущности, переписал вызовы прямо в исходниках mbedTLS, благо их не так уж много. Можно, конечно, и перекодирующую фунцию вставить для адаптации, но она не всегда короткая.

Новый вопрос:
А насколько нужна и актуальна система отзыва сертификатов (CRL) для ембеддед клиента? что с ней делать?
denyslb
Цитата(Ruslan1 @ Nov 3 2017, 20:25) *
MBEDTLS_ERR_PK_INVALID_PUBKEY поборол.
Ошибка в конфиге была:
Пытался использовать сертификат с ключом (2048 бит) длинной больше чем указано в MBEDTLS_MPI_MAX_SIZE (задается в байтах).

вызовы у функций работы с файлами в FatFS другие, и форматы данных и ключи другие. Чтоб не множить сущности, переписал вызовы прямо в исходниках mbedTLS, благо их не так уж много. Можно, конечно, и перекодирующую фунцию вставить для адаптации, но она не всегда короткая.

Новый вопрос:
А насколько нужна и актуальна система отзыва сертификатов (CRL) для ембеддед клиента? что с ней делать?

Ну вот к примеру каспер когда начинает перехватывать траффик для проверок на вирусы, CRL перестает работать, хотя может уже и пофиксили. Т.е. они не парились этим вопросом.
На случай если сертификат сервера скомпрометировали - оставляет возможность проверить то, не отозван ли он.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.