wolfSSL Встроенная библиотека SSL/TLS
Встроенная библиотека SSL wolfSSL (ранее CyaSSL) — это легкая библиотека SSL/TLS, написанная на ANSI C и предназначенная для встроенных сред, RTOS и сред с ограниченными ресурсами — в первую очередь из-за ее небольшого размера, скорости и набора функций. Он широко используется в стандартных операционных средах, а также из-за его бесплатной цены и отличной кроссплатформенной поддержки. wolfSSL поддерживает отраслевые стандарты вплоть до текущих TLS 1.3 и DTLS 1.3, он до 20 раз меньше OpenSSL и предлагает прогрессивные шифры, такие как группы ChaCha20, Curve25519, Blake2b и Post-Quantum TLS 1.3. Бенчмаркинг и отзывы пользователей показывают значительно более высокую производительность при использовании wolfSSL по сравнению с OpenSSL.
wolfSSL основан на криптографической библиотеке wolfCrypt. Две версии wolfCrypt прошли проверку на соответствие стандарту FIPS 140-2 (сертификат № 2425 и сертификат № 3389). Выполняется проверка на соответствие FIPS 140-3. Для получения дополнительной информации посетите раздел часто задаваемых вопросов о wolfCrypt FIPS или напишите по адресу [email protected].
Почему стоит выбрать wolfSSL?
Есть много причин выбрать wolfSSL в качестве встроенного, настольного, мобильного или корпоративного решения SSL/TLS. Некоторые из основных причин включают размер (типичный размер занимаемого пространства варьируется от 20 до 100 КБ), поддержку новейших стандартов (SSL 3.0, TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3, DTLS 1.0, DTLS 1.2 и DTLS 1.3). , поддержка текущих и прогрессивных шифров (включая потоковые шифры), многоплатформенность, бесплатность и API совместимости с OpenSSL для упрощения переноса в существующие приложения, которые ранее использовали пакет OpenSSL. Полный список функций см. в главе 4 руководства wolfSSL.
Примечания, пожалуйста, прочтите
Примечание 1
wolfSSL начиная с версии 3.6.6 больше не включает SSLv3 по умолчанию. wolfSSL также больше не поддерживает комплекты шифров со статическими ключами с PSK, RSA или ECDH. Это означает, что если вы планируете использовать наборы шифров TLS, вы должны включить DH (DH включен по умолчанию), или включить ECC (ECC включен по умолчанию), или вы должны включить наборы шифров со статическим ключом с одним или несколькими из следующих определений:
WOLFSSL_STATIC_DH
WOLFSSL_STATIC_RSA
WOLFSSL_STATIC_PSK
Однако наборы шифров со статическими ключами устарели и будут удалены из будущих версий TLS. Они также снижают вашу безопасность, удаляя PFS.
При компиляции ssl.c
wolfSSL теперь будет выдавать ошибку компилятора, если наборы шифров недоступны. Вы можете удалить эту ошибку, определив WOLFSSL_ALLOW_NO_SUITES
в том случае, если вы этого хотите, т. е. вы не используете наборы шифров TLS.
Примечание 2
wolfSSL использует другой подход к проверке сертификатов, чем OpenSSL. Политика по умолчанию для клиента заключается в проверке сервера. Это означает, что если вы не загружаете центры сертификации для проверки сервера, вы получите ошибку подключения, а не ошибку подписывающего лица для подтверждения сбоя (-188).
Если вы хотите имитировать поведение OpenSSL при успешном выполнении SSL_connect
, даже если проверка сервера не удалась и снизилась безопасность, вы можете сделать это, вызвав:
wolfSSL_CTX_set_verify ( ctx , WOLFSSL_VERIFY_NONE , NULL );
перед вызовом wolfSSL_new();
. Хотя это не рекомендуется.
Примечание 3
Значения перечисления SHA, SHA256, SHA384, SHA512 больше недоступны, если wolfSSL собран с помощью --enable-opensslextra
( OPENSSL_EXTRA
) или с помощью макроса NO_OLD_SHA_NAMES
. Эти имена сопоставляются с API OpenSSL для одной хеш-функции вызова. Вместо этого в качестве имени перечисления следует использовать имена WC_SHA
, WC_SHA256
, WC_SHA384
и WC_SHA512
.
wolfSSL, выпуск 5.7.4 (24 октября 2024 г.)
Версия 5.7.4 была разработана в соответствии с процессом разработки и контроля качества wolfSSL (см. ссылку ниже) и успешно прошла критерии качества. https://www.wolfssl.com/about/wolfssl-software-development-process-quality-assurance
ПРИМЕЧАНИЕ. * --enable-heapmath устарел и будет удален к концу 2024 г.
PR означает запрос на включение, а PR ссылается на номер запроса на извлечение GitHub, в который было добавлено изменение кода.
Уязвимости
- [Низкий] Когда уровень совместимости OpenSSL включен, проверка сертификата в wolfSSL велась иначе, чем в OpenSSL, в реализациях X509_STORE_add_cert() и X509_STORE_load_locations(). Раньше в тех случаях, когда приложение явно загружало промежуточный сертификат, wolfSSL проверял только до этого промежуточного сертификата, а не до корневого центра сертификации. Это влияет только на случаи использования, в которых API вызывается напрямую, и не влияет на соединения TLS. Пользователям, которые вызывают API X509_STORE_add_cert() или X509_STORE_load_locations() непосредственно в своих приложениях, рекомендуется обновить используемую версию wolfSSL или выполнить дополнительные проверки работоспособности сертификатов, загружаемых в X509_STORE при проверке сертификата. (#8087)
Исправление экспериментальной сборки PQC TLS
- При использовании TLS с включенными пост-квантовыми алгоритмами соединение использует меньшую кривую EC, чем согласовано. Пользователям, создающим с помощью --enable-experimental и включающим наборы шифров PQC с соединениями TLS, рекомендуется обновить используемую версию wolfSSL. Спасибо Даниэлю Корреа за отчет. (#8084)
Новые дополнения к функциям
- Добавлены новые оптимизации сборки RISC-V 64 для SHA-256, SHA-512, ChaCha20, Poly1305 и SHA-3 (PR 7758,7833,7818,7873,7916).
- Реализация поддержки идентификатора соединения (CID) с помощью DTLS 1.2 (PR 7995).
- Добавить поддержку (DevkitPro)libnds (PR 7990).
- Добавить порт для Mosquitto OSP (проект с открытым исходным кодом) (PR 6460).
- Добавить порт для инициализации sssd (PR 7781)
- Добавить порт для eXosip2 (PR 7648)
- Добавить поддержку STM32G4 (PR 7997).
- Добавлена поддержка аппаратного обеспечения TPU MAX32665 и MAX32666 и поддержка обратного криптографического обратного вызова ARM ASM (PR 7777).
- Добавить поддержку сборки wolfSSL для использования в libspdm (PR 7869).
- Добавьте порт для использования с Nucleus Plus 2.3 (PR 7732)
- Начальная поддержка сертификатов атрибутов RFC5755 x509 (acerts). Включено с помощью --enable-acert (PR 7926)
- PKCS#11 Разгрузка заполнения RSA позволяет токенам выполнять CKM_RSA_PKCS (подпись/шифрование), CKM_RSA_PKCS_PSS (подпись) и CKM_RSA_PKCS_OAEP (шифрование). (ПР 7750)
- Добавлены функции стиля «новый» и «удалить» для выделения кучи/пула и освобождения криптоструктур низкого уровня (PR 3166 и 8089).
Улучшения и оптимизации
- Увеличить максимальный уровень по умолчанию. имена от 128 до 1024 (ПР 7762)
- Добавлена новая функция согласования DH с постоянным временем wc_DhAgree_ct (PR 7802).
- Расширенный уровень совместимости с API EVP_PKEY_is_a (PR 7804).
- Добавьте опцию для отключения теста программного обеспечения для тестирования cryptocb с помощью --disable-cryptocb-sw-test (PR 7862).
- Добавьте вызов для обратного вызова проверки сертификата перед проверкой дат сертификата (PR 7895).
- Расширенные алгоритмы, поддерживаемые оболочкой wolfCrypt CSharp. Добавление поддержки RNG, ECC (ECIES и ECDHE), RSA, ED25519/Curve25519, AES-GCM и хеширования (PR 3166).
- Расширьте поддержку MMCAU для использования с DES ECB (PR 7960).
- Обновите AES SIV для обработки нескольких связанных входных данных (PR 7911).
- Удалить HAVE_NULL_CIPHER из --enable-openssh (PR 7811)
- Удалены дублирующиеся проверки if(NULL) при вызове XFREE (макрос делает) (PR 7839).
- Установите RSA_MIN_SIZE по умолчанию на 2048 бит (PR 7923).
- Добавлена поддержка wolfSSL, который будет использоваться в качестве TLS по умолчанию в ядре Zephyr (PR 7731).
- Добавьте сборку поставщика включения с помощью --enable-wolfprovider с помощью autotools (PR 7550).
- Поддержка Renesas RX TSIP ECDSA (PR 7685)
- Поддержка перехода на более раннюю версию DTLS1.3, если сервер поддерживает CID (PR 7841).
- Серверная сторона проверяет OCSP, даже если он использует v2 multi (PR 7828).
- Добавить обработку отсутствующих хеш-параметров при синтаксическом анализе и создании пакета PKCS7 (PR 7845).
- Добавьте использование w64wrapper для Poly1305, что позволит использовать Poly1305 в средах, где нет типа word64 (PR 7759).
- Обновление поддержки maxq10xx (PR 7824).
- Добавить поддержку анализа необязательных атрибутов PKCS8 (PR 7944).
- Добавьте поддержку любого из методов с помощью DTLS 1.3 (PR 8012).
- Добавлена поддержка PKCS7 PEM для анализа данных PEM с помощью BEGIN/END PKCS7 (PR 7704).
- Добавить поддержку CMake для WOLFSSL_CUSTOM_CURVES (PR 7962).
- Добавить поддержку сопоставления крайних левых подстановочных знаков в X509_check_host() (PR 7966).
- Добавлена возможность установки пользовательского SKID при создании пакета PKCS7 (PR 7954).
- Создание wolfSSL как библиотеки с Ada и исправлениями манифеста Alire (PR 7303,7940)
- Обновлена поддержка Renesas RX72N (PR 7849)
- Добавлен новый параметр WOLFSSL_COPY_KEY, позволяющий всегда копировать ключ в объект SSL (PR 8005).
- Добавьте новую опцию WOLFSSL_COPY_CERT, чтобы всегда копировать буфер сертификатов для каждого объекта SSL (PR 7867).
- Добавьте возможность использовать AES-CBC с HMAC для билета сеанса по умолчанию enc/dec. По умолчанию используется AES-128-CBC с HMAC-SHA256 (PR 7703).
- Улучшения использования памяти в wc_PRF, sha256 (для небольшого кода, когда доступно много регистров) и объектах sp_int (PR 7901).
- Измените сценарий настройки, чтобы обойти «>>» без команды. В более старых версиях /bin/sh это может быть неоднозначно, как в таких ОС, как FreeBSD 9.2 (PR 7876).
- Не пытайтесь включать системные заголовки, если они не требуются (PR 7813).
- Сертификаты: кодировка DER параметра алгоритма подписи ECC теперь может иметь значение NULL с определением (PR 7903).
- SP x86_64 asm: проверьте поддержку AVX2 для виртуальных машин (PR 7979).
- Обновление поддержки rx64n в gr-rose (PR 7889)
- Обновите версию FSP до v5.4.0 для RA6M4 (PR 7994).
- Обновите версию драйвера TSIP до версии 1.21 для RX65N RSK (PR 7993).
- Добавьте новый обратный вызов криптовалюты для RSA с заполнением (PR 7907).
- Заменено использование pqm4 реализациями wolfSSL Kyber/MLDSA (PR 7924).
- Модернизированная поддержка ограничения памяти для C11 и clang (PR 7938).
- Добавьте обратный вызов для переопределения ошибок CRL (PR 7986).
- Расширьте обратный вызов неизвестного расширения X509 для использования с контекстом пользователя (PR 7730).
- Дополнительная трассировка ошибок отладки добавлена с помощью TLS (PR 7917).
- Добавлена поддержка трассировки стека вызовов библиотеки во время выполнения с помощью --enable-debug-trace-errcodes=backtrace, используя libbacktrace (PR 7846).
- Расширенное соответствие C89 (PR 8077)
- Расширенная поддержка WOLFSSL_NO_MALLOC (PR 8065)
- Добавлена поддержка кросс-компиляции модуля ядра Linux (PR 7746).
- Обновлен модуль ядра Linux с поддержкой ядра 6.11 и 6.12 (PR 7826).
- Введите WOLFSSL_ASN_ALLOW_0_SERIAL, чтобы разрешить анализ сертификатов с серийным номером 0 (PR 7893).
- Добавьте условный репозиторий_владелец во все рабочие процессы wolfSSL GitHub (PR 7871).
Эспрессиф / Обновления Arduino
- Обновление wolfcrypt settings.h для Espressif ESP-IDF, обновление шаблона (PR 7953)
- Обновление Espressif sha, util, mem, time helpers (PR 7955)
- Исправление Espressif _thread_local_start и _thread_local_end (PR 8030)
- Улучшить тест для устройств Espressif (PR 8037).
- Представьте общий CONFIG_WOLFSSL_EXAMPLE_NAME для Espressif, Kconfig (PR 7866).
- Добавьте wolfSSL esp-tls и поддержку пакета сертификатов для Espressif ESP-IDF (PR 7936).
- Обновление версии wolfssl для Arduino (PR 7775)
Пост-обновления квантовой криптографии
- Dilithium: поддержка массивов фиксированного размера в dilithium_key (PR 7727).
- Дилитий: добавлена возможность использования предварительного расчета с маленьким знаком (PR 7744).
- Разрешить сборку Kyber с использованием FIPS (PR 7788).
- Разрешить использование Kyber asm в модуле ядра Linux (PR 7872).
- Дилитий, Кибер: обновление окончательной спецификации (PR 7877)
- Дилитий: поддержка чернового и окончательного проектов FIPS 204 (PR 7909,8016)
Оптимизация сборки ARM
- Добавлены оптимизации сборки ARM32 для ChaCha20 и Poly1305 (PR 8020).
- Улучшения оптимизации сборки Poly1305 для Aarch64 (PR 7859)
- Добавлена оптимизация сборки Poly1305 для Thumb-2 (PR 7939).
- Добавление опции сборки ARM ASM в STM32CubePack (PR 7747)
- Добавьте ARM64 в проект Visual Studio (PR 8010).
- Оптимизация сборки Kyber для ARM32 и Aarch64 (PR 8040,7998)
- Оптимизация сборки Kyber для ARMv7E-M/ARMv7-M (PR 7706)
Исправления
- Загрузка ключа ECC: исправления для сертификатов с параметрами, размер которых не является значением по умолчанию (PR 7751).
- Исправления для сборки x86 в Visual Studio для ОС, отличных от Windows (PR 7884).
- Исправление секретного обратного вызова TLS v1.2, неправильно обнаруживающее неверный главный секрет (PR 7812).
- Исправления для использования сборки PowerPC с Darwin и SP math all (PR 7931).
- Исправление обнаружения старых версий Mac OS при попытке соединения с libdispatch (PR 7932).
- Исправлено понижение версии DTLS1.3 до DTLS1.2, когда сервер отправляет несколько пакетов подтверждения, объединенных в одну передачу. (ПР 7840)
- Исправлена ошибка, из-за которой OCSP сохранял запрос, если он был сохранен в ssl->ctx->certOcspRequest (PR 7779).
- Исправление в OCSP для поиска CA по хэшу ключа вместо доб. идентификатор ключа (PR 7934)
- Исправление статической памяти и однопоточной сборки (PR 7737).
- Исправление, запрещающее использование Shake128/256 с Xilinx AFALG (PR 7708).
- Исправление для поддержки PKCS11 без генерации ключей RSA (PR 7738).
- Исправление отсутствия вызова обратного вызова подписи при использовании обратных вызовов PK + TLS 1.3 (PR 7761).
- Метка исправления ASM Cortex-M/Thumb2 для компилятора IAR (PR 7753)
- Исправление с помощью PKCS11 для правильной перебора slotId (PR 7736).
- Прекратите удалять заголовок последовательности в расширении AltSigAlg (PR 7710).
- Исправьте ParseCRL_AuthKeyIdExt с шаблоном ASN, чтобы установить значение extAuthKeyIdSet (PR 7742).
- Используйте максимальную длину ключа для размера буфера шифрования PSK (PR 7707).
- Исправление DTLS 1.3 для проверки размера, включающее исправления заголовков и CID (PR 7912,7951).
- Исправьте STM32 Hash FIFO и добавьте поддержку STM32U5A9xx (PR 7787).
- Исправление ошибки сборки CMake для сборок Curl (PR 8021).
- SP Maths: исправление PowerPC ASM для использования XOR вместо LI (PR 8038).
- SSL-загрузка ключей/сертификатов: тестирование и исправления (PR 7789)
- Разное. исправления для Дилитиума и Кибера (PR 7721,7765,7803,8027,7904)
- Исправления для сборки исходных кодов wolfBoot для PQ LMS/XMSS (PR 7868).
- Исправления для сборки с включенным Kyber с использованием CMake и порта Zephyr (PR 7773).
- Исправление крайних случаев с возобновлением сеанса с помощью TLS 1.2 (PR 8097).
- Исправлена проблема с ARM ASM, когда AES CFB/OFB не инициализировал «левый» элемент (PR 8099).
Для получения дополнительной информации об уязвимостях посетите страницу уязвимостей по адресу: https://www.wolfssl.com/docs/security-vulnerabilities/.
Инструкции по сборке см. в файле INSTALL. Более подробную информацию можно найти в Интернете по адресу: https://wolfssl.com/wolfSSL/Docs.html.
Ресурсы
Веб-сайт WolfSSL
wolfSSL вики
Часто задаваемые вопросы по FIPS 140-2/140-3
Документация wolfSSL
Руководство по WolfSSL
Справочник по API wolfSSL
Справочник по API wolfCrypt
ТЛС 1.3
Уязвимости wolfSSL
Дополнительные примеры wolfSSL
Структура каталогов
├── certs [Certificates used in tests and examples]
├── cmake [Cmake build utilities]
├── debian [Debian packaging files]
├── doc [Documentation for wolfSSL (Doxygen)]
├── Docker [Prebuilt Docker environments]
├── examples [wolfSSL examples]
│ ├── asn1 [ASN.1 printing example]
│ ├── async [Asynchronous Cryptography example]
│ ├── benchmark [TLS benchmark example]
│ ├── client [Client example]
│ ├── configs [Example build configurations]
│ ├── echoclient [Echoclient example]
│ ├── echoserver [Echoserver example]
│ ├── pem [Example for convert between PEM and DER]
│ ├── sctp [Servers and clients that demonstrate wolfSSL's DTLS-SCTP support]
│ └── server [Server example]
├── IDE [Contains example projects for various development environments]
├── linuxkm [Linux Kernel Module implementation]
├── m4 [Autotools utilities]
├── mcapi [wolfSSL MPLAB X Project Files]
├── mplabx [wolfSSL MPLAB X Project Files]
├── mqx [wolfSSL Freescale CodeWarrior Project Files]
├── rpm [RPM packaging metadata]
├── RTOS
│ └── nuttx [Port of wolfSSL for NuttX]
├── scripts [Testing scripts]
├── src [wolfSSL source code]
├── sslSniffer [wolfSSL sniffer can be used to passively sniff SSL traffic]
├── support [Contains the pkg-config file]
├── tests [Unit and configuration testing]
├── testsuite [Test application that orchestrates tests]
├── tirtos [Port of wolfSSL for TI RTOS]
├── wolfcrypt [The wolfCrypt component]
│ ├── benchmark [Cryptography benchmarking application]
│ ├── src [wolfCrypt source code]
│ │ └── port [Supported hardware acceleration ports]
│ └── test [Cryptography testing application]
├── wolfssl [Header files]
│ ├── openssl [Compatibility layer headers]
│ └── wolfcrypt [Header files]
├── wrapper [wolfSSL language wrappers]
└── zephyr [Port of wolfSSL for Zephyr RTOS]