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

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.


Информация
titleДанная статья применима к:
  • 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 можно командой:

Command

openssl version


Информация

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

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

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

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

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

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

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

Command

openssl list -providers

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

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

Раскрыть
titleКак задействовать уставшие алгоритмы для обеспечения совместимости

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

Command
Titleecho -n "hello" | openssl md4 -provider legacy

  MD4(stdin)= 866437cb7a794bce2b727acc0362ee27



Предупреждение

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

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

  1. Добавить в секцию [openssl_init],строку providers = provider_

    sect]

    section, если она не была добавлена ранее:

    Блок кода
    [openssl_init]
    providers = provider_section
    engines = engine_section


  2. Перейти в конец файла /etc/ssl/openssl.cfg.
  3. Добавить строку в секцию [provider_sect] строку с указанием секции провайдера defaultsection], если она не была добавлена ранее:

    Блок кода
    [provider_section] # List of providers to load (список загружаемых провайдеров)
    [provider_sect]
    default = default_sect
    По умолчанию есть, gostprov - провайдер ГОСТ, по умолчанию включен
    default = default_section
    gostprov = gostprov_section 


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

    Блок кода
    [default_sect]
    activate = 1


  5. Добавить Добавить строку в секцию [provider_sectsection] строку с указанием секции провайдера , например legacy = legacy_sect:section:

    Блок кода
    Блок кода
    # List of providers to load (список загружаемых провайдеров)
    [provider_sectsection]
    default = default_sectsection
    legacygostprov = legacy_sect

    Раскомментировать параметр activate = 1 в секции [default_sect]:

    Блок кода
    [default_sect]
    activate = 1

    Добавить секцию [legacy_sect] с параметром activate = 1 :

    Блок кода
    [default_sect]
    activate = 1
    
    [legacy_sect]
    activate = gostprov_section
    legacy = legacy_section
    [legacy_section]
    activate=1
    [gostprov_section]
    activate=1
    [default_section]
    activate=1


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


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

Command
Titleecho -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_libSSL_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 перечень поддерживаемых алгоритмов ГОСТ доступен по команде:

Command

openssl engine gost -c

OpenSSL 3

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

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

Command

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 



...