Перейти к содержанию
    

разбираюсь с mbedTLS

Здравствуйте!

 

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

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) проходит без ошибок.

 

собственно, сами сертификаты:

#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() ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне что, нужно напрямую менять все вызовы в исходниках mbedTLS, или есть какой-то более красивый способ, чтоб при вызове fopen() на самом деле вызывалась моя функция f_open() ?

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

Спасибо! вроде этот вопрос закрыл. :)

 

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

 

кстати, чем "define xxx yyy" отличается от "define xxx(...) yyy(...)"?

показывает компилятору что это функция?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MBEDTLS_ERR_PK_INVALID_PUBKEY поборол.

Ошибка в конфиге была:

Пытался использовать сертификат с ключом (2048 бит) длинной больше чем указано в MBEDTLS_MPI_MAX_SIZE (задается в байтах).

 

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

 

Новый вопрос:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

MBEDTLS_ERR_PK_INVALID_PUBKEY поборол.

Ошибка в конфиге была:

Пытался использовать сертификат с ключом (2048 бит) длинной больше чем указано в MBEDTLS_MPI_MAX_SIZE (задается в байтах).

 

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

 

Новый вопрос:

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

Ну вот к примеру каспер когда начинает перехватывать траффик для проверок на вирусы, CRL перестает работать, хотя может уже и пофиксили. Т.е. они не парились этим вопросом.

На случай если сертификат сервера скомпрометировали - оставляет возможность проверить то, не отозван ли он.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...