Дерево страниц

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Special Edition РУСБ.10015-16 исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12

Введение

OpenSSL — это инструмент защиты данных. Инструмент доступен в Astra Linux по умолчанию. В Astra Linux Special Edition 1.8 используется OpenSSL поколения 3 (версия 3.2). В более ранних обновлениях используется поколение 1.1 (версия 1.1). Узнать установленную версию OpenSSL можно командой:

openssl version

Поддержка OpenSSL 1.1 прекращена в сентябре 2023 года.

Основные различия поколений OpenSSL 1.1 и OpenSSL 3

Исключение интерактивного режима

В OpenSSL поколение 3 исключен интерактивный режим (режим командной строки). Для выполнения функций, ранее реализуемых в интерактивном режиме, следует использовать опции командной строки.

Новая концепция модульности

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

Список провайдеров для OpenSSL поколения 3 доступен по команде:

openssl list -providers

Поддержка устаревших встроенных алгоритмов

По умолчанию, алгоритмы инструмента OpenSSL, отмеченные как устаревшие, исключены из состава встроенных алгоритмов и вынесены в отдельный провайдер legacy. Этот провайдер по умолчанию отключен.

Для разового использования устаревшего алгоритма достаточно добавить опцию -provider legacy к команде, например так:

echo -n "hello" | openssl md4 -provider legacy

  MD4(stdin)= 866437cb7a794bce2b727acc0362ee27

Использование устаревших алгоритмов защитного преобразования данных небезопасно!

Чтобы полностью задействовать устаревшие алгоритмы необходимо подключить провайдер legacy, для чего нужно отредактировать конфигурационный файл /etc/ssl/openssl.cfg следующим образом:

  1. Добавить в секцию [openssl_init] строку providers = provider_section, если она не была добавлена ранее:

    [openssl_init]
    providers = provider_section # добавить или раскоментировать
    engines = engine_section
  2. Перейти в конец файла /etc/ssl/openssl.cfg.
  3. Добавить секцию [provider_section], если она не была добавлена ранее:

    [provider_section] # По умолчанию есть, gostprov - провайдер ГОСТ
    default = default_section # добавить или раскоментировать
    gostprov = gostprov_section 

    Провайдер ГОСТ gostprov включается при установке пакета libgost-astra и выключается при его удалении

  4. Раскоментировать секцию  [default_sect]  и параметр activate = 1 в секции [default_sect], если ранее он не был раскоментирован или добавить их:

    [default_sect] # добавить или раскоментировать
    activate = 1 # добавить или раскоментировать
  5. Добавить в секцию [provider_section] строку с указанием секции провайдера legacy = legacy_section. Итоговый вид секции провайдеров в конце файла /etc/ssl/openssl.cfg :

    [provider_section]
    default = default_section
    gostprov = gostprov_section
    legacy = legacy_section # добавить
    [legacy_section] # добавить
    activate=1 # добавить
    [gostprov_section]
    activate=1
    [default_section] # добавить или раскоментировать 
    activate=1 # добавить или раскоментировать


Проверка работы провайдера

Проверить, включена ли поддержка legacy можно посмотрев список провайдеров :


Или выполнив без опции -provider legacy команду :

echo -n "hello" | openssl md4

  MD4(stdin)= 866437cb7a794bce2b727acc0362ee27

Где md4 — любая из хэш-функций, отмеченная как устаревшая.

Основной перечень функциональных различий между версиями OpenSSL 1.1.1 и 3.0.0

  • Добавлены:
    • новые опции для openssl list (список доступен по команде openssl list -commands);
    • руководство по переходу к новой версии в раздел man(7) документации разработчиков OpenSSL;
    • функция OPENSSL_info() и команда openssl info  для получения встроенной справки;
    • поддержка подключаемых групп протокола TLSv1.3;
    • поддержка Kernel TLS (KTLS) - обработки данных для протокола TLS на уровне ядра;
    • функции для генерации асимметричных пар ключей;
    • OSSL_LIB_CTX , контекст библиотеки libcrypto для менеджеров контекстов;
    • новые функции для поддержки структур OSSL_LIB_CTX в OpenSSL API;
    • алгоритмы X25519, X448, Ed25519, Ed448, SHAKE128 и SHAKE256 включены в состав FIPS-провайдеров;
    • полноценный HTTP/HTTPS-клиент, поддерживающий:
      • методы GET и POST;
      • произвольные типы содержимого запросов и ответов
      • TLS;
      • соединения через HTTP-прокси;
      • соединения и обмен данными через пользовательский BIOs (разрешающий неявные соединения) и обработку таймаутов.
    • инструмент util/check-format.pl для проверки соблюдения правил безопасности при разработке приложений;
    • методы OSSL_ENCODER  и OSSL_DECODER  для операций по защите данных и работающие через API;
    • структура OSSL_PARAM_BLD , облегчающая работу с API OSSL_PARAM;
    • макросы ERR_raise() и ERR_raise_data() для работы с ошибками;
    • функция OSSL_PROVIDER_available() для проверки доступности провайдера;
    • команда openssl mac, использующая API EVP_MAC;
    • команда openssl kdf, которая использует API EVP_KDF;
    • поддержка инструментов для трассировки и вывода данных отладки;
    • интерфейс хэш-функций EVP_MAC . Поддерживаются следующие функции: BLAKE2, CMAC, GMAC, HMAC, KMAC, POLY1305 и SIPHASH;
    • интерфейс формирования ключей EVP_KDF . Поддерживаются следующие функции формирования ключа: HKDF, KBKDF, KRB5 KDF, PBKDF2, PKCS12 KDF, SCRYPT, SSH KDF, SSKDF, TLS1 PRF, X9.42 KDF и X9.63 KDF;
    • поддержка протокола управления сертификатами CMP, позволяющая запрашивать сертификаты у удостоверяющего центра через HTTP/HTTPS (инструмент openssl-cmp);
  • Для TLS по умолчанию установлен уровень безопасности 1, при этом  запрещено использование сертификатов X509, подписанных с использованием SHA1 (такие сертификаты не проходят проверку подлинности);
  • Включены инструменты отладки enable-crypto-debug  и enable-crypto-debug-backtrace, применяется очистка адресов и обнаружение утечек;
  • Удалены:
    • интерактивный режим утилиты openssl;
    • интерфейс RAND_DRBG API;
  • Отмечены как устаревшие:
    • Типы и функции:
      • OCSP_REQ_CTX;
      • EC_KEY  и EC_KEY_METHOD;
      • RSA  и RSA_METHOD, DSA  и DSA_METHOD;
      • DH  и DH_METHOD, ERR_load;
      • ERR_put_error();
      • ERR_get_error_line();
      • ERR_get_error_line_data();
      • ERR_peek_error_line_data();
      • ERR_peek_last_error_line_data() и ERR_func_error_string();
      • все низкоуровневые хэш-функции алгоритмов MD2, MD4, MD5, MDC2, RIPEMD 160, SHA1, SHA224, SHA256, SHA384, SHA512 и Whirlpool;
      • все низкоуровневые функции защитного преобразования для алгоритмов AES, Blowfish, Camellia, CAST, DES, IDEA, RC2, RC4, RC5 и SEED;
      • хэш-функции EVP: MD2, MD4, MDC2, WHIRLPOOL и RIPEMD-160;
      • все низкоуровневые функции генерации открытого ключа для алгоритмов DH, DSA, ECDH, ECDSA и RSA . Протоколы SSL 3, TLS 1.0, TLS 1.1 и DTLS 1.0 работают только на уровне безопасности 0, за исключением случаев, когда используется обмен ключами RSA без SHA1;
    • интерфейс ENGINE API (EVP — высокоуровневый API для работы с алгоритмами защитного преобразования данных, работающий без привязки к их конкретным реализациям);

      EVP — высокоуровневый API для работы с алгоритмами защитного преобразования данных, работающий без привязки к их конкретным реализациям

    • все варианты EVP-защитного преобразования алгоритмов CAST5, BF, IDEA, SEED, RC2, RC4, RC5 и DES.
  • Лицензия Apache обновлена до v2.0;

Различия версий 3.0.0 и 3.1.0

  • Добавлены:
    • параметр конфигурации провайдера FIPS для принудительной проверки EMS во время выполнения KDF TLS1_PRF. Для проверки к команде openssl fipsinstall необходимо добавить параметр -ems-check;
    • поддержка алгоритма KMAC (KECCAK Message Authentication Code) в функцию KBKDF (Key Based Key Derivation Function);
  • провайдер FIPS включает в себя алгоритмы 3DES в режиме ECB, CBC и Adds для обеспечения обратной совместимости с прошлыми версиями OpenSSL. Использование алгоритмов в операциях указывается опцией fips=yes;
  • поддержка провайдерами инструкции RNDR и регистров RNDRRS для ARM-архитектуры (aarch64) при генерации случайных чисел;
  • команды s_client и s_server теперь сообщают, когда версия TLS не включает механизм повторного согласования, что позволяет избежать ошибок при работе с TLS и повторном согласовании в начале сеанса связи;
  • поддержка AES-GCM с помощью инструкций AVX 512 vAES и vPCLMULQDQ;
  • параллельное двухпроцессорное 1536/2048-разрядное модульное возведение в степень для процессоров с поддержкой AVX512_IFMA;
  • начиная с версии OpenSSL 3.1 отмечены как устаревшие начиная и могут быть отключены путем определения макроса OPENSSL_NO_DEPRECATED_3_1 следующие функции:
    • OPENSSL_LH_stats;
    • OPENSSL_LH_node_stats;
    • OPENSSL_LH_node_usage_stats;
    • OPENSSL_LH_stats_bio;
    • OPENSSL_LH_node_stats_bio;
    • OPENSSL_LH_node_usage_stats_bio;
  • Макрос DEFINE_LHASH_OF заменен на DEFINE_LHASH_OF_EX;
  • Для подписей PKCS#1 RSASSA-PSS длина значения параметра salt может изменяться до максимальной, чтобы соответствовать FIPS 186-4. Чтобы использовать максимальную длину нужно присвоить значение OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX для параметра rsa_pss_saltlen

    Параметр salt определяет длину входной строки, передающейся вместе с преобразуемыми данными в хэш-функцию

Различия версий 3.1.0 и 3.2.0

  • Добавлены:
    • поддержка настраиваемой длины выходных данных путем установки параметра size в алгоритм хеширования BLAKE2b;
    • возможность удаления объектов из хранилища с помощью метода OUR-LOCAL_STORE_delete()  и соответствующей функции API провайдера-хранилища mgmt OSSL_FUNC_store_delete() ;
    • функция OSSL_FUNC_store_open_ex() в API провайдера-хранилища mgmt для передачи обратного вызова ключевой фразы при открытии хранилища;
    • поддержка на стороне клиента для QUICK;
    • дополнительная опция saltlen, позволяющая изменить значение параметра salt не должно быть задано по умолчанию в утилите openssl для параметров pkcs8 и enc;
    • поддержка алгоритма SHA256/192;
    • поддержка безопасного получения обновления сертификата корневого центра сертификации в CMP;
    • функция SSL_get 0_group_name() для предоставления доступа к имени группы, используемой для обмена ключами TLS;
    • конфигурационные опции no-http для принудительного отключения поддержки HTTP, no-apps и no-docs,чтобы отключить использование приложений командной строки для утилиты openssl и вывод документации;
    • конфигурационная опция  no-necks, которая отключает поддержку кривых X25519, X448 и EdDSA;
    • функции провайдера OSSL_FUNC_key mgmt_im/export_types_ex(), которые получают контекст провайдера в качестве параметра;
    • функция в библиотеке ssl_lib SSL_get_handshake_rtt, позволяющая вычислять время доставки пакетов для протокола TLS;
    • расширенный командный режим для команды s_client (параметр “-adv”);
    • опция -quic в команде s_client разрешающая подключение к серверам QUIC (требуется использование расширения ALPN протокола TLS с помощью опции -alpn);
    • поддержка необработанного открытого ключа (RFC7250);
    • функция EC_GROUP_to_params(), которая создает массив SSL_PARAM из заданной EC_GROUP;
    • добавлена функция OSSL_sleep(), не зависящая от платформы;
    • поддержка подключаемых (на основе провайдера) алгоритмов подписи TLS, что позволяет выполнять операции аутентификации по протоколу TLS 1.3 с использованием алгоритмов, по умолчанию не включенных в OpenSSL;
    • поддержка подключаемых (на основе провайдера) алгоритмов подписи CMS, что позволяет CMS подписывать и проверять операции с помощью алгоритмов, которые по умолчанию не включены в OpenSSL;
    • поддержка гибридного защитного преобразования с открытым ключом (HPKE);
    • поддержка сжатия сертификатов (RFC8879), включая библиотеки для сжатия Brotli и Zstandard;
    • возможность указывать пользовательские атрибуты к файлам стандарта PKCS#12;
    • API метод PKCS12_create_ex2, идентичный существующему PKCS12_create_ex, но допускающий заданный пользователем обратных вызовов;
    • KCS12_SAFEBAG_set_0_attr, позволяющий добавлять новые значения переменной attr к существующему стеку STACK_OF attrs;
    • опция определения длины параметра salt для стандарта PKCS#12;
    • дополнительные профили защиты SRTP из RFC8723 и RFC8269;
    • поддержка механизма TCP Fast Open для (RFC7413), что позволяет передавать данные в пакетах SYN и SYN-ACK;
    • наборы для защитного преобразования на основе DHE_PSK (RFC 4279) и ECDHE_PSK (RFC 5489);
    • новые API-интерфейсы SSL для работы с отпечатками TLS/SSL;
    • поддержка Bignum-значений в API OSSL_PARAM;
    • проверка ключей для X.509 при подписании разрабатываемого кода в соответствии с требованиями добровольной сертификации CA/Browser Forum;
    • новые методы BIO_sendmmsg() и BIO_recvmmsg() для работы с защищенными потоками BIO, которые позволяют отправлять и получать несколько сообщений за один вызов. (подробности доступны в BIO_sendmmsg(3));
    • функции BIO_s_dgram_pair() и BIO_s_dgram_mem() для поддержки работы c памятью в защищенных потоках BIO и корректной работы методов BIO_sendmmsg() и BIO_recvmmsg();
    • поддержка кривых Brainpool в TLS-1.3;
    • поддержка функций формирования ключа по алгоритмам Argon2d, Argon2i, Argon2id KDFs, а также базовая реализация пула потоков для некоторых платформ;
    • возможность использования готовых наборов чисел в процессе защитного преобразования в функциях CMS API и с помощью параметра  -digest для утилиты openssl;
    • реализация эллиптической кривой secp384r1 с использованием редукции для повышения скорости работы некоторых алгоритмов (параметр сборки enable-ec_nistp_64_gcc_128);
    • поддержка всех пяти экземпляров схем цифровой подписи EdDSA из RFC8032: Ed25519, Ed25519 ctx, Ed25519ph, Ed448 и Ed448ph (потоковая передача пока не поддерживается для вариантов HashEdDSA (Ed25519ph и Ed448ph));
    • поддержка процессорных инструкций SM4-XTS;
    • поддержка детерминированных подписей ECDSA (RFC6979);
    • поддержка алгоритма AES-GCM-SIV (RFC8452);
    • поддержка HPKE DHKEM у провайдеров, используемых точкой доступа HPKE (RFC9180);
    • новая опция настройки no-sm2-precomp для отключения предварительно вычисленной таблицы для оптимизации алгоритма SM2 в aarch64;
    • поддержка файлов PKCS12 без MAC в функции PKCS12_parse();
  • изменена длина параметра salt по умолчанию, используемая файлами PBES2 KDF (PBKDF2 и scrypt), с 8 байт до 16 байт:
    • в стандарте PKCS#5 (RFC 8018):
      • для PBE используется длина записи в 64 байта;
      • для PBES2 рекомендуется использовать минимум 64 бита;
    • для соответствия требованиям FIPS в PBKDF2 требуется длина записи в 128 бит, что влияет на параметры утилиты openssl , такие как genrsa и pkcs8, так же на методы API, такие как PM_write_bio_Private Key(), зависящие от значения по умолчанию;
  • изменено значение параметра конфигурации ess_cert_id_alg по умолчанию, которое используется для вычисления идентификатора сертификата открытого ключа TSA. Алгоритм по умолчанию обновлен до SHA256 вместо SHA1;
  • при использовании команды openssl x509 для проверки атрибутов сертификата когда проверка завершается неудачей возвращается код завершения с описанием ошибки;
  • уровень безопасности SSL/TLS по умолчанию был изменен с 1 на 2. Ключи RSA, DSA и DH менее 2048 бит, а также ключи ECC менее 224 бит больше не применимы;
  • функции семейства SSL_CTX_set_cipher_list определяют защитное преобразование, используя имена стандарта IANA;
  • функция получения ключа PVK была перенесена из b2i_PVK_bio_ex() в отдельный криптографический провайдер в качестве EVP_KDF. Приложения, которым требуется этот KDF, должны будут загружать устаревший криптографический провайдер;
  • наборы алгоритмов защитного преобразования с режимом CCM 8 в TLS были понижены до нулевого уровня безопасности;
  • имена в X.509 теперь по умолчанию отображаются в виде строк UTF-8;
  • приложения x509, ca и req теперь выдают сертификаты X.509 v3. Опция -x509v1 в req поддерживает генерацию сертификатов X.509 v1;
  • функции X509_sign() и X509_sign_ctx(), проверяют, имеет ли сертификат X.509 версию 3, если информация о сертификате содержит упоминания X.509;
  • API CMS расширен методами CMS_SignedData и CMS_EnvelopedData для обработки данных;
  • функции CMS_add0_cert() и CMS_add1_cert() не выдают ошибку, если добавляемый сертификат уже присутствует;
  • функции CMS_sign_ex() и CMS_sign() игнорируют любые повторяющиеся сертификаты в аргументах certs;
  • для протокола TLS 1.3 в режиме CCM включена поддержка KTLS (kernel TLS) - защитного преобразования на уровне ядра. Актуально для релизов ядра Linux 5.4.164, 5.10.84, 5.15.7 и любых последующих версий новее 5.16;
  • для команд s_server и s_client доступна опция -ktls, которая включает поддержку технологии KTLS;
  • поддержка функции KTLS sendfile() для технологии Linux Zero-Copy;
  • вызовы OBJ_  теперь потокобезопасны и используют глобальную блокировку;
  • функция OPENSSL_malloc() и другие функции распределения теперь генерируют ошибки при сбоях;
  • в качестве защитных мер от уязвимости CVE-2020-25659 при использовании алгоритма RSA стандарта PKCS#1 версии 1.5 в случае ошибки в процессе обратного защитного преобразования не будет выводиться сообщение об ошибке с подробностями о производимой операции.

Поддержка отечественных алгоритмов защитного преобразования ГОСТ

OpenSSL 1.1

Поддержка серии алгоритмов защитного преобразования ГОСТ реализована при помощи пакета libgost-astra, предоставляющего модуль (engine) поддержки алгоритмов ГОСТ.

При установленном пакете libgost-astra перечень поддерживаемых алгоритмов ГОСТ доступен по команде:

openssl engine gost -c

OpenSSL 3

Поддержка серии алгоритмов защитного преобразования ГОСТ реализована при помощи пакета libgost-astra, адаптированного для работы с OpenSSL поколение 3 и предоставляющего модуль (engine) и провайдер (provider) поддержки алгоритмов ГОСТ.

При установленном пакете libgost-astra перечень поддерживаемых алгоритмов ГОСТ доступен по команде:

openssl engine gost -c

Сроки поддержки версий OpenSSL разработчиками OpenSSL


Версия OpenSSLСовместимость OpenSSL с прошлыми версиямиДата релиза версии OpenSSLДата окончания поддержки OpenSSL разработчиками инструмента
1.1.1совместима11 сентября 201811 сентября 2023
3.0.0частично7 сентября 20217 сентября 2026
3.1.0совместима14 марта 202314 марта 2025
3.2.0совместима23 ноября 202323 ноября 2025 


  • Нет меток