Выпуск OpenSSL 4.0.0: устаревшие протоколы ушли, поддержка постквантовых технологий пришла

Версия OpenSSL 4.0.0 исключает ряд давно устаревших функций, добавляет поддержку Зашифрованного приветствия клиента и вносит изменения на уровне API, которые потребуют обновления кода приложений, созданных для более старых версий.

Удалены SSLv3, SSLv2 Client Hello и механизм Engines

Поддержка протокола SSLv3 была полностью удалена. Этот протокол был объявлен устаревшим в 2015 году, а в OpenSSL он был отключён по умолчанию начиная с версии 1.1.0 в 2016 году. Также удалена поддержка приветствия клиента по протоколу SSLv2.

API механизма Engines, который предоставлял возможность интеграции внешних аппаратных и программных реализаций криптографии, был полностью исключён. Опция сборки no-engine и макрос OPENSSL_NO_ENGINE теперь присутствуют всегда. Удалены устаревшие пользовательские методы EVP_CIPHER, EVP_MD, EVP_PKEY и EVP_PKEY_ASN1, а также устаревшие функции фиксированных версий SSL/TLS и функции состояния ошибок ERR_get_state(), ERR_remove_state() и ERR_remove_thread_state().

Добавлены Зашифрованное приветствие клиента и постквантовые алгоритмы

В выпуск добавлена поддержка Зашифрованного приветствия клиента в соответствии со стандартом RFC 9849. Эта технология позволяет шифровать сообщение приветствия клиента, чтобы сторонние наблюдатели не могли определить имя сервера, к которому подключается клиент.

В части постквантовой криптографии выпуск включает гибридную группу обмена ключами curveSM2MLKEM768, алгоритм хеширования ML-DSA-MU, функцию cSHAKE согласно стандарту NIST SP 800-185, а также поддержку согласованного обмена ключами FFDHE в TLS 1.2 по стандарту RFC 7919.

Изменения API и поведения, влияющие на интеграторов

Структура ASN1_STRING стала непрозрачной. Сигнатуры множества функций API, включая те, что используются при обработке X.509, теперь содержат квалификатор const там, где это применимо. Функции X509_cmp_time(), X509_cmp_current_time() и X509_cmp_timeframe() объявлены устаревшими в пользу функции X509_check_certificate_times().

Библиотека libcrypto больше не очищает глобально выделенные данные с помощью atexit(). Функция OPENSSL_cleanup() теперь выполняется в глобальном деструкторе или, по умолчанию, не выполняется вовсе. Функция BIO_f_reliable() была удалена без замены, так как она не работала с момента выхода версии 3.0.

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

Изменения в сборке и инструментарии

Поддержка устаревших эллиптических кривых в TLS согласно RFC 8422, а также поддержка явных EC-кривых по умолчанию отключены на этапе компиляции, но доступны опции конфигурации для их повторного включения. Цели сборки для вариантов darwin-i386 и darwin-ppc были удалены.

Скрипт c_rehash был удалён в пользу команды openssl rehash. Самопроверки FIPS теперь можно отложить с помощью опции -defer_tests команды openssl fipsinstall. В Windows-сборках добавлена поддержка выбора между статической и динамической линковкой среды выполнения Visual C++.

OpenSSL 4.0.0 доступен на GitHub.

Обязательно к прочтению:

  • 40 инструментов с открытым исходным кодом, меняющих подходы команд безопасности к защите стека
  • Время сканирования прошивок, стоимость и где команды запускают EMBA

Подпишитесь на ежемесячную рассылку Help Net Security без рекламы, чтобы быть в курсе самых важных инструментов кибербезопасности с открытым исходным кодом. Подписаться можно здесь!