Гид по технологиям

Как использовать SSL‑сертификат в Node.js для разработки HTTPS

4 min read Node.js Обновлено 02 Jan 2026
SSL в Node.js: HTTPS для разработки
SSL в Node.js: HTTPS для разработки

Два металлических секционных забора, соединённых цепью; между ними большой зазор, в котором логотип Node.js зелёного цвета.

Краткое введение

Node.js имеет встроенный модуль https, который позволяет запустить HTTPS‑сервер без внешнего прокси. Для разработки достаточно self‑signed сертификата; для продакшна обычно используют CA‑подписанные сертификаты (например, от letsencrypt.org) и ставят приложение за обратным прокси (NGINX, HAProxy).

Определение: Self‑signed сертификат — сертификат, подписанный самим собой без участия доверенного центра сертификации (CA). Браузеры помечают такие сертификаты как ненадёжные.

Шаги: как подключить SSL в Node.js локально

  1. Сгенерируйте ключ и сертификат (пример для OpenSSL):
openssl req -x509 -newkey rsa:2048 -nodes -keyout my-server-key.pem -out my-server-cert.pem -days 365
  1. Создайте файл входа в сервер, например index.js.

  2. Импортируйте модули https и fs в index.js:

const https = require('https');
const fs = require('fs');
  1. Определите объект options с путями к файлам ключа и сертификата:
const options = {
  key: fs.readFileSync("my-server-key.pem"),
  cert: fs.readFileSync("my-server-cert.pem")
}
  1. Для реального сертификата (например, от Let’s Encrypt) добавьте цепочку CA:
const options = {
  key: fs.readFileSync("/path/to/private.key"),
  cert: fs.readFileSync("/path/to/ssl_certificate.crt"),
  ca: [
    fs.readFileSync("/path/to/ca_root_file.crt"),
    fs.readFileSync("/path/to/ca_bundle_certificate.crt")
  ]
}
  1. Создайте сервер и прослушивайте порт 443:
https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end("hello world");
}).listen(443);
  1. Запустите сервер:
node index.js
  1. Откройте в браузере https://localhost или https://localhost:443/

Вы увидите «hello world». Браузер может показать предупреждение о ненадёжном соединении — это нормально для self‑signed сертификатов.

Important: На Unix‑системах порт 443 — привилегированный. Если при запуске появится ошибка “Error: listen EACCES: permission denied 0.0.0.0:443”, запустите процесс с правами root (sudo node index.js) или используйте другой порт (например, 8443) и пробросьте трафик в продакшне через прокси.

Примеры альтернатив и схемы развёртывания

  • Локальная разработка с self‑signed сертификатом — быстрый вариант для тестов UI и OAuth flows.
  • Развёртывание за обратным прокси (NGINX, HAProxy) — рекомендуемый подход в продакшне: прокси держит сертификат и отвечает за TLS, а Node.js работает на внутреннем порту (например, 3000).
  • Использование mkcert для создания локально доверенных сертификатов (удобно для разработчиков).
  • Let’s Encrypt для бесплатных доверенных сертификатов в продакшне.

Когда такой подход не подходит

  • Если нужно доверенное соединение для внешних пользователей — self‑signed не годится.
  • В высоконагруженных системах TLS‑терминацию следует выносить на специализированный слой (например, CDN, edge proxy) для производительности и централизованного управления.
  • Для автоматического обновления сертификатов в продакшне лучше использовать ACME (Let’s Encrypt) или управляющие решения.

Мини‑методология: развёртывание HTTPS в три шага

  1. Получите или сгенерируйте ключ и сертификат (локально — self‑signed/mkcert, в проде — CA).
  2. Настройте Node.js https.createServer с опциями key/cert/ca.
  3. Тестируйте локально и затем переведите TLS на обратный прокси в продакшне.

Чек‑лист для разработчика и DevOps

Developer:

  • Сгенерировать локальный сертификат
  • Подключить key/cert в index.js
  • Запустить на порту 8443 при необходимости
  • Проверить поведение фронтенда при HTTPS (cookies, Mixed Content)

DevOps:

  • Настроить обратный прокси с действующим сертификатом
  • Обеспечить автоматическое обновление (Let’s Encrypt/ACME)
  • Проверить HSTS, OCSP Stapling, TLS версии и шифры
  • Логи и мониторинг HTTPS‑соединений

Безопасность и жёсткие рекомендации

  • Не храните приватные ключи в репозитории. Используйте защищённое хранилище секретов.
  • В продакшне отключайте устаревшие версии TLS (TLS 1.0/1.1) и слабые шифры.
  • Рассмотрите использование ключей малой длины только в исключительных случаях; RSA 2048 или выше — минимум.
  • Разделяйте права доступа к файлам ключей (chmod 600, владелец — сервисный пользователь).

Критерии приёмки

  • Сервер запускается без ошибок и отвечает по HTTPS на указанном порту.
  • Браузер может предупредить о self‑signed сертификате (в локальных тестах это допустимо).
  • В продакшне сертификат должен быть CA‑подписан и валиден для домена.

Тесты и сценарии проверки

  • Открыть https://localhost:443/ — получить 200 и текст “hello world”.
  • Запустить с несуществующими путями к ключам — процесс должен упасть с понятной ошибкой чтения файлов.
  • Проверить поведение при попытке слушать привилегированный порт без прав — должна возникнуть ошибка EACCES.

Краткая модель мышления (как думать о TLS и Node.js)

  • TLS — это слой шифрования и аутентификации поверх TCP. Node.js принимает уже установившийся TLS‑контекст, если вы используете https.createServer.
  • Решите, где будет TLS‑терминация: у приложения (удобно для тестов) или у прокси/CDN (обычно в продакшне).

1‑строчный глоссарий

  • TLS: протокол шифрования, заменивший SSL;
  • CA: центр сертификации, подписывает сертификаты;
  • Self‑signed: сертификат, подписанный самим собой, не доверен браузерами.

Альтернативные утилиты и локальные инструменты

  • mkcert — создаёт локально доверенные сертификаты для разработчиков;
  • ngrok / localtunnel — пробрасывают локальный HTTPS в интернет для внешних тестов;
  • Let’s Encrypt + certbot — бесплатные CA‑сертификаты для продакшна.

Заключение

Использование SSL в Node.js для локальной разработки — простой и полезный шаг: он позволяет тестировать HTTPS‑специфичные сценарии (cookies, secure flags, OAuth redirects). Для продакшна переносите TLS‑терминацию на обратный прокси и используйте CA‑подписанные сертификаты с автоматическим обновлением.

Notes: Сохраняйте приватные ключи отдельно от кода и проверяйте настройки TLS в тестовой среде до релиза на продакшн.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправить iPhone Unavailable — 4 проверенных способа
Мобильные устройства

Исправить iPhone Unavailable — 4 проверенных способа

Разблокировать отключённый iPhone — 4 метода
Mobile

Разблокировать отключённый iPhone — 4 метода

Безпарольный вход в Microsoft — как настроить
Безопасность

Безпарольный вход в Microsoft — как настроить

Группы общих паролей на iPhone (iOS 17)
Руководство

Группы общих паролей на iPhone (iOS 17)

Решение проблем с менеджером паролей — практический гид
Безопасность

Решение проблем с менеджером паролей — практический гид

Настройка двухфакторной аутентификации в соцсетях
Безопасность

Настройка двухфакторной аутентификации в соцсетях