Как установить список шифров WolfSSL? - PullRequest
2 голосов
/ 09 мая 2019

У меня есть устройство IOT, которое связывается с DTLS 1.2 protocol. Мы уже интегрировали WolfSSL в наш проект, и он работает нормально. Чего я хочу добиться, так это установить для моего WolfSSL client только определенный набор шифров, чтобы убедиться, что он использует правильный метод шифрования.

const char *CIPHER_LIST = "PSK-AES128-CCM-8";
WOLFSSL_CTX *ctx = wolfSSL_CTX_new(wolfDTLSv1_2_client_method());
wolfSSL_CTX_set_cipher_list(ctx, CIPHER_LIST);

WOLFSSL *ssl = wolfSSL_new(ctx)
wolfSSL_set_cipher_list(ssl, CIPHER_LIST);

Когда я печатаю список шифров;

for (int i = 0; i< 50; i++) {
    // print cipher list based on priority
    NSLog(@"->%s", wolfSSL_get_cipher_list(i));
}

Результат будет

DHE-RSA-AES128-SHA
DHE-RSA-AES256-SHA
DHE-PSK-AES256-GCM-SHA384
DHE-PSK-AES128-GCM-SHA256
PSK-AES256-GCM-SHA384
PSK-AES128-GCM-SHA256
DHE-PSK-AES256-CBC-SHA384
DHE-PSK-AES128-CBC-SHA256
PSK-AES256-CBC-SHA384
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA
PSK-AES256-CBC-SHA
DHE-PSK-AES128-CCM
DHE-PSK-AES256-CCM
PSK-AES128-CCM
PSK-AES256-CCM
PSK-AES128-CCM-8
PSK-AES256-CCM-8
DHE-RSA-AES128-SHA256
DHE-RSA-AES256-SHA256
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES256-GCM-SHA384
EDH-RSA-DES-CBC3-SHA

Если я позвоню wolfSSL_get_cipher(ssl), я получу результат "НЕТ".

Библиотека работала нормально, пока не было обновлено встроенное ПО нашего IOT-устройства, после чего мы не получили от него никаких ответов. После того, как я отследил сбои ответа, я понял, что это проблема рукопожатия SSL, и я решил установить список шифров. Мне интересно, есть что-то, что я пропускаю или делаю неправильно?

Кроме того, у нас есть приложение для Android, которое обменивается данными с тем же устройством с использованием метода шифрования «PSK-AES128-CCM-8». Вот почему я хочу установить в своем списке только этот конкретный метод.

Кроме того, это user_settings.h для WolfSSL;

/* Configuration */
#define IPHONE  /* Needed for Xcode */
#define DEBUG_WOLFSSL

#define HAVE_HASHDRBG
#define HAVE_AESGCM
#define HAVE_AESCCM

#define WOLFSSL_SHA512
#define WOLFSSL_SHA384
#define WOLFSSL_STATIC_PSK
#define WOLFSSL_DTLS

#define NO_WOLFSSL_SERVER

#ifdef HAVE_FIPS
#define NO_MD4
#define NO_HC128
#define NO_RABBIT
#define NO_DSA
#define NO_PWDBASED
#else
#define USE_FAST_MATH
#endif

1 Ответ

1 голос
/ 09 мая 2019

@ efdalustaoglu,

Сожалею, что обновление прошивки устройства привело к этой ошибке.Позвольте мне посмотреть, могу ли я удовлетворительно обратиться к неизвестным или неожиданным элементам, а затем предложить подход, который поможет решить эту проблему быстрее:

1)

Когда я распечатываю список шифров;

for (int i = 0; i< 50; i++) {
    // print cipher list based on priority
    NSLog(@"->%s", wolfSSL_get_cipher_list(i));
}

...

Функция wolfSSL_get_cipher_list получает список всех доступных шифров, она не возвращает только те, которые специально установлены, этопочему вы видите весь список распечатанным.

2)

Если я вызываю wolfSSL_get_cipher (ssl), я получаю результат "NONE".

Thisвернет набор шифров, который был выбран во время рукопожатия.Если вы вызовете это после успешного рукопожатия (IE: ret = wolfSSL_connect (ssl); где ret - WOLFSSL_SUCCESS), вы увидите, какой набор шифров был согласован во время рукопожатия.

3) Наконец, вы не делаете ничего плохогоиз того, что я вижу, на самом деле это хороший первый шаг к получению воспроизводимой установки, которая дает сбой ожидаемым образом.(IE ограничивается только одним набором шифров).


Шаги, которые могут помочь быстро разрешить:

1) Отладка:

Можете ли вы поделиться кодами ошибок (еслилюбой) что вы видите?Я вижу, что вы уже добавили DEBUG_WOLFSSL в свои настройки, вы можете вызвать wolfSSL_Debugging_ON(); в вашем приложении, чтобы создать журнал отладки.Вы можете поделиться этим для обзора?

2) Wireshark:

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

Кроме того, у нас есть приложение Android, которое связывается с тем же устройством с помощью «PSK-AES128-CCM-8»."метод шифрования.Вот почему я хочу установить в своем списке только этот конкретный метод.

Это отлично!Если вы можете захватить успешное соединение с устройства Android и сравнить этот захват с неудачным соединением, мы можем сравнить различия в пакетах Client Hello и Server Response.

3) В крайнем случае, если вы можетене сужайте это, вы всегда можете связаться с нашей службой поддержки wolfSSL через официальный канал поддержки, отправив электронное письмо на адрес [support (at) wolfssl (dot) com] или посетив наш портал zendesk по адресу [wolfssl (dot) zendesk (точка) ком].Наша команда всегда рада помочь всем, чем мы можем.

...