23 октября 2026 года в репозитории OpenSSL на GitHub вышел OpenSSL 4.1.0. Тег называется openssl-4.1.0. В заметке к нему выпуск назван feature release: релиз с новой функциональностью. Рядом лежат исходники openssl-4.1.0.tar.gz, 55738000 байт, и файл openssl-4.1.0.tar.gz.sha256. В нём одна строка: 50c17baf54cb008f6ce42d50deb4b28050a1aad711636cabd4b241c7e90cc2fd для архива openssl-4.1.0.tar.gz.
На VPS с WordPress важен не тег, а библиотека, с которой уже работают nginx, php-fpm и MariaDB. Пакет из архива Ubuntu или Debian в день релиза на GitHub сам не становится 4.1.0. openssl version продолжает печатать номер дистрибутива. Строка built with OpenSSL в nginx -V показывает библиотеку веб-сервера. Она может отличаться от вывода openssl version, если nginx собран отдельно от пакета дистрибутива.
Подменять библиотеку в /usr распакованным тарболом не стоит. nginx и модуль openssl в PHP при старте ищут ту libssl, с которой их собрали. Чужая библиотека на этом месте обычно выглядит просто: nginx не стартует, либо PHP перестаёт открывать внешние HTTPS, и встают обновления WordPress и запросы плагинов наружу. Локальная база при этом на месте. Ломается связка процессов, а не «сайт куда-то уехал».
Сначала номера. Конфиги для этой проверки не правят.
openssl version
nginx -V 2>&1 | tr ' ' '\n' | grep -i openssl
php -i 2>/dev/null | grep -i 'OpenSSL Library Version'
dpkg -l 'libssl*' openssl 2>/dev/null | awk '/^ii/ {print $2, $3}'
php -i показывает CLI. Если пул php-fpm запущен из другой ветки, ту же строку смотрите у её бинарника: на одном сервере php8.3 и php8.4 легко стоят рядом, и команда php может быть не той, которой отвечает сайт. Пока в этих строках нет 4.1.0, сегодняшний тег рабочий nginx не меняет. sudo apt update && sudo apt install --only-upgrade openssl поднимает пакет внутри репозитория дистрибутива. Имя библиотечного пакета берите из вывода dpkg: на разных выпусках Ubuntu и Debian оно разное. Номер 4.1.0 там появится, когда его соберёт дистрибутив.
DTLS 1.3
В списке новых возможностей первая строка: поддержка DTLS 1.3, RFC 9147. Подробности проект отсылает к руководству ossl-guide-dtlsv13(7). В том же списке поддержка DTLS в API слушателя SSL (SSL listener API), GREASE по RFC 8701 и функция вывода ключей IKEV2 KDF. Отдельной строкой идёт начальная поддержка архитектуры Elbrus2000. В заметке она обозначена как e2k.
DTLS это TLS поверх датаграмм, то есть UDP. Сайт на nginx принимает HTTPS по TCP: порт 443, сертификат, запрос уходит в php-fpm. Локальная MariaDB по сокету тоже не DTLS. Поддержка в исходниках 4.1.0 не дописывает ssl_protocols и не включает UDP на уже стоящем виртуальном хосте. GREASE, случайные расширения, чтобы реализация не спотыкалась о незнакомые поля, в конфиг WordPress не приезжает. IKEV2 KDF относится к обмену ключами IKEv2. Если VPN на сервере собран другим набором программ, эта строка его не переключает. Elbrus2000 касается сборки под процессор e2k. Обычный VPS на amd64 или arm64 эту цель не использует.
В блоке значимых изменений рядом лежат ускорения, не новые директивы. На ppc64le ускорены операции NTT у ML-DSA и ML-KEM, это постквантовые подпись и обмен ключом. На x86_64 ускорен ML-DSA, для него добавлен SHAKE сразу на четыре потока под AVX-512, а расшифрование AES-CBC получило код под AVX-512 и VAES. Быстрее становится тот путь, который эти функции реально вызывает, и только на процессоре с нужными инструкциями. Отдельного переключателя в nginx или в php.ini у этих строк нет.
Соединения TLS 1.3 до AES-CBC не доходят: там AES-GCM или ChaCha20-Poly1305. Ускорение расшифрования CBC из этого выпуска их не касается. Оно попадает в соединения, которые ещё договорились о CBC, обычно это TLS 1.2.
Для Windows в том же списке добавлены цели сборки VC-WIN32-MSVC2013 и VC-WIN64A-MSVC2013. Это внутренние функции под пробелы поддержки C99 в компиляторе MSVC 2013. Цели Windows on Itanium (VC-WIN64I) и Windows CE (VC-CE) из Configurations убраны. На Linux-сервере эти четыре строки ничего не собирают и ничего не удаляют.
tsget перешёл на Net::Curl
Утилита tsget больше не использует WWW::Curl::Easy. В заметке прямо сказано: модуль заброшен, tsget переведён на Net::Curl::Easy из CPAN-дистрибутива Net-Curl. Кто вызывает tsget, ставит модуль до обновления своей сборки. Утилита ходит за метками времени. nginx, php-fpm, certbot и MariaDB её не запускают. Пока openssl version не печатает 4.1.0, ставить модуль незачем.
Если собираете именно 4.1.0 и метки времени через tsget у вас в ходу, Net::Curl::Easy поставьте заранее. Имя пакета в Ubuntu и Debian смотрите у себя: apt-cache search net-curl. Ставить наугад пакет с похожим именем не нужно: утилите нужен именно Perl-модуль Net::Curl::Easy.
Из Configure убраны опции no-ecdsa и no-ecdh. Причина в заметке короткая: эти опции на самом деле не отключали реализацию. Эллиптические кривые выключает no-ec. Скрипт сборки, который долго передавал no-ecdsa или no-ecdh, на 4.1.0 описывает уже не то, что автор скрипта имел в виду. Нужно убрать кривые целиком: оба старых флага меняйте на no-ec. Оставить кривые и выкинуть только ECDSA или только ECDH отдельным флагом больше нельзя. Старые опции код не выключали, в этом выпуске их убрали из Configure.
KeyUpdate и ещё три ошибки DTLS
В конце заметки четыре известные ошибки. Все про DTLS. Для первой прямо сказано: исправление в работе и планируется в одном из следующих выпусков.
Когда сторона получает KeyUpdate в DTLS 1.3, остальные записи после рукопожатия (post-handshake), которые ещё ждут подтверждения, выкидываются из буфера повторной отправки. Если исходная передача потерялась, NewSessionTicket повторно уже не уйдёт. Это issue 32878. Сайт на TLS этот буфер не использует: KeyUpdate поверх UDP у nginx на 443 нет.
Постоянный сбой приёма на DTLS listener может прийти принятому соединению как SSL_ERROR_WANT_READ. Опрос и следующие вызовы accept тоже могут ошибку не показать. Программа продолжает ждать, хотя сбой уже окончательный. Это issue 33277.
Повторяемая ошибка записи на неблокирующем соединении, которое принято с того же listener, может прийти как SSL_ERROR_SYSCALL вместо SSL_ERROR_WANT_WRITE. Код, для которого SYSCALL значит «соединение умерло», закроет соединение, которое ещё живое. Это issue 33278.
Сервер DTLS 1.3 может оборвать рукопожатие алертом unexpected_message. Так бывает, если клиент подтвердил часть или весь первый flight сервера раньше, чем отправил свой ответ: после потери пакета или пока клиент готовит ответ аутентификации. Это issue 33242.
Обычный виртуальный хост WordPress эти четыре пути не исполняет. Нет DTLS listener и нет рукопожатия по UDP. Включать DTLS 1.3 на сайте, который и так открывается по HTTPS, незачем: протокол другой. Свой сервис на DTLS, собранный с 4.1.0, эти четыре пункта лучше учесть до того, как в него пойдут чужие пакеты. Выпуск их не закрывает, он их перечисляет.
php-fpm и MariaDB из-за этой заметки перезапускать не нужно. Сертификат перевыпускать не из чего: срок и ssl_certificate релиз не трогает. nginx -t нужен, когда меняли конфиг. Ради номера 4.1.0 reload не делают. Если выпуск всё же собираете сами, ставьте его в отдельный каталог и не подкладывайте вместо системной libssl, на которую уже линкуются nginx и PHP. Копию конфига nginx снимают, когда правят файл. Здесь файл не правят.