Релиз Node.js 26.7.0: подгрузка ключей через STORE-загрузчики и обновление корневых сертификатов
Команда разработчиков Node.js официально представила очередной релиз текущей ветки — Node.js v26.7.0 (Current). Выпуск содержит важные обновления в области информационной безопасности бэкенда, расширяет возможности интеграции с аппаратными HSM-модулями через OpenSSL, обновляет список доверенных сертификатов и приносит очередные оптимизации в встроенный JavaScript-движок V8.
Хотя текущие выпуски ветки Current служат площадкой для обкатки новых возможностей перед включением в LTS, нововведения в модуле node:crypto представляют прямой интерес для корпоративных систем с повышенными требованиями к защите ключей.
Интеграция OpenSSL STORE API в модуль crypto
Главной технической новинкой Node.js 26.7.0 стала реализация поддержки внешних загрузчиков ключей OpenSSL STORE (PR #63949, автор Filip Skokan).
В традиционных серверных приложениях закрытые ключи TLS и шифрования либо считываются из файлов на диске (PEM/DER-форматы), либо передаются через переменные окружения. В строго защищённых банковских и корпоративных контурах такой подход недопустим: приватные ключи хранятся внутри аппаратных модулей безопасности (HSM), защищённых токенов PKCS#11 или системных хранилищ ключей операционной системы.
Благодаря интеграции OpenSSL STORE API методы crypto.createPrivateKey() и crypto.createPublicKey() в Node.js 26.7.0 научились принимать специальные URI-указатели вместо сырых данных ключа:
import { createPrivateKey, createSign } from 'node:crypto';
// Загрузка приватного ключа напрямую из внешнего HSM-хранилища OpenSSL STORE
const privateKey = createPrivateKey({
key: 'store:pkcs11:token=HardwareToken;object=rsa-signing-key',
format: 'pem'
});
// Создание цифровой подписи без экспорта самого ключа в оперативную память Node.js
const signer = createSign('SHA256');
signer.update('Данные для транзакции');
const signature = signer.sign(privateKey);
При таком вызове байты закрытого ключа никогда не попадают в адресное пространство процесса Node.js и не могут быть вычитаны из оперативной памяти при дампах процесса или уязвимостях типа buffer overflow. Криптографические операции подписи и расшифровки делегируются непосредственно защищённому модулю.
Обновление базы корневых сертификатов NSS 3.12
В релиз Node.js 26.7.0 включена свежая версия базы доверенных корневых сертификатов Mozilla Network Security Services (NSS 3.12).
Автоматическая актуализация цепочек доверия сертификатов гарантирует безопасную работу клиента fetch() и модуля node:https. В рамках этого обновления:
- Удалены скомпрометированные и истёкшие корневые центры сертификации (CA);
- Добавлены новые доверенные сертификаты промежуточных центров;
- Усилены требования к длине ключей и алгоритмам подписи для TLS-соединений.
Для сервисов, совершающих внешние вызовы к публичным API, своевременное обновление сертификатов предотвращает внезапные ошибки вида UNABLE_TO_VERIFY_LEAF_SIGNATURE.
Доработки Web Storage API и среды выполнения
Помимо криптографического модуля, версия 26.7.0 получила ряд важных улучшений в серверном окружении:
- Стабилизация Web Storage: Доработана встроенная реализация
localStorageиsessionStorageдля CLI-скриптов и автономных модулей, приводящая поведение хранилища в соответствие со спецификациями WHATWG. - Обновление движка V8: Включены патчи сборщика мусора и JIT-компилятора V8, ускоряющие операции распределения памяти при активном создании короткоживущих объектов.
- Оптимизация потоков (Streams): Метод
Readable.fromWeb()получил сокращённые накладные расходы при трансформации веб-потоков в нативные Node.js Streams.
Сравнение подходов к управлению ключами
| Параметр | Традиционный подход (PEM-файлы) | OpenSSL STORE API (Node.js 26.7.0) |
|---|---|---|
| Место хранения ключа | Файловая система / переменные окружения | Аппаратный HSM / токен PKCS#11 / ОС |
| Доступ к памяти процесса | Ключ вычитывается в RAM Node.js | Ключ физически не попадает в RAM |
| Защита от утечек при дампах | Уязвим (утечка RAM раскрывает ключ) | Абсолютная защита (операции на HSM) |
| Ротация ключей | Требует перезапуска или re-read файлов | Прозрачна на стороне внешнего STORE |
Практическое пошаговое руководство по конфигурированию STORE API
Для подключения аппаратного ключа PKCS#11 через OpenSSL STORE в Node.js 26.7.0 выполните следующие действия:
- Убедитесь, что в операционной системе установлен модуль
opensslс поддержкойpkcs11-engineилиprovider-pkcs11. - Задайте путь к конфигурации OpenSSL через переменную окружения
OPENSSL_CONF=/etc/ssl/openssl.cnf. - Убедитесь, что в файле
openssl.cnfзарегистрирован ваш провайдер HSM. - В коде Node.js передайте валидный
store:URI в методcrypto.createPrivateKey(), указав маркер формата. - Протестируйте вызов метода подписи
signer.sign(), проверив отсутствие обращений к локальным PEM-файлам в логах системных вызововstrace.
Совместимость с FIPS 140-3 и инфраструктурные нюансы
Для организаций, соблюдающих стандарты защиты данных FIPS 140-3, поддержка OpenSSL STORE упрощает сертифицирование Node.js-сервисов. Поскольку криптографические операции вычисляются во внешнем аппаратно защищённом контуре, сам сервер приложений Node.js освобождается от необходимости хранения мастер-ключей в зашифрованных swap-файлах.
При этом разработчикам следует учитывать, что при недоступности внешнего HSM-устройства вызов createPrivateKey с store: URI сгенерирует синхронную исключительную ситуацию ERR_CRYPTO_CUSTOM_ENGINE_ERROR. В продакшен-коде рекомендуется оборачивать инициализацию ключей в конструкции try/catch с реализацией механизмов повторных попыток (retry policy).
Рекомендации по обновлению
Разработчикам бэкенд-сервисов рекомендуется протестировать сборки приложений на Node.js 26.7.0 в staging-окружениях. Особое внимание следует обратить на тесты TLS-соединений с внешними ресурсами и проверить работу вызовов node:crypto, если в проекте используются кастомные провайдеры безопасности.

