bg-tutorials

Как установить SSL-сертификат на Node.js

В этом руководстве вы узнаете, как установить SSL-сертификат на Node.js, используя встроенный модуль https. В отличие от веб-сервера, такого как Apache или Nginx, Node.js загружает ваш сертификат, приватный ключ и цепочку CA непосредственно в JavaScript, поэтому «установка» происходит внутри кода вашего приложения.

Создание кода CSR в Node.js

Если вы еще не подавали заявку на SSL-сертификат, вам сначала нужно сгенерировать CSR (запрос на подпись сертификата). CSR — это небольшой закодированный текстовый блок, содержащий ваши контактные данные и открытый ключ, который вы отправляете в удостоверяющий центр при оформлении заказа. У вас есть два варианта:

Отправьте CSR в удостоверяющий центр при оформлении заказа. После того как CA проверит его и выпустит ваш SSL-сертификат, переходите к установке ниже.

Установка SSL-сертификата на Node.js

Шаг 1: Подготовьте файлы сертификата

После проверки удостоверяющий центр отправит вам файлы сертификата по электронной почте. Распакуйте архив. У вас должны быть:

  • yourdomain.crt — ваш основной сертификат домена.
  • yourdomain.ca-bundle — промежуточные (и корневой) сертификаты, составляющие CA-пакет.
  • yourdomain.key — приватный ключ, сгенерированный вместе с CSR.

Браузеры должны получать промежуточную цепочку, а не только сертификат вашего домена, иначе некоторые клиенты отклонят соединение. Самый чистый способ передать цепочку в Node.js — объединить ваш сертификат и CA-пакет в один файл полной цепочки:

cat yourdomain.crt yourdomain.ca-bundle > fullchain.crt

Разместите файлы fullchain.crt и yourdomain.key там, где ваше приложение может их прочитать, и убедитесь, что приватный ключ доступен для чтения только пользователю, запускающему Node.js.

Шаг 2: Создайте HTTPS-сервер в Node.js

Создайте файл сервера. Для этого примера мы назовем его https_server.js, но вы можете использовать любое имя файла. В примере ниже используется CommonJS (require), который работает во всех поддерживаемых версиях Node.js. Замените пути, выделенные жирным шрифтом, на свои:

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  // Recommended TLS hardening (2026): never negotiate below TLS 1.2
  minVersion: 'TLSv1.2'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);

Вам нужно заменить выделенные жирным шрифтом части своими данными:

  • /path/to/private.key: полный путь к файлу вашего приватного ключа.
  • /path/to/fullchain.crt: полный путь к файлу полной цепочки, созданному на Шаге 1.

Примечание о порте: HTTPS по умолчанию использует порт 443. Для привязки к нему требуются повышенные привилегии, поэтому за обратным прокси-сервером или в среде разработки вы можете предпочесть высокий порт, например 8443. Просто измените значение, передаваемое в listen().

Предпочитаете ES-модули? Если ваш проект использует "type": "module" в файле package.json (или файл с расширением .mjs), используйте синтаксис import. Параметры TLS остаются такими же:

import https from 'node:https';
import fs from 'node:fs';

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  minVersion: 'TLSv1.2'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Welcome to a Node.js HTTPS servern');
}).listen(443);

Альтернатива: передайте цепочку с помощью параметра ca. Если вы предпочитаете хранить файлы отдельно вместо создания файла полной цепочки, оставьте cert указывающим на сертификат вашего домена и предоставьте промежуточные сертификаты через массив ca:

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/yourdomain.crt'),
  ca: [
    fs.readFileSync('/path/to/intermediate.crt'),
    fs.readFileSync('/path/to/ca_bundle.crt')
  ],
  minVersion: 'TLSv1.2'
};

Используете Express? Передайте ваше приложение Express app в качестве обработчика запросов. Параметры сертификата остаются точно такими же:

const express = require('express');
const https = require('https');
const fs = require('fs');

const app = express();
app.get('/', (req, res) => res.send('Hello over HTTPS'));

const options = {
  key: fs.readFileSync('/path/to/private.key'),
  cert: fs.readFileSync('/path/to/fullchain.crt'),
  minVersion: 'TLSv1.2'
};

https.createServer(options, app).listen(443);

Шаг 3: Запустите ваш HTTPS-сервер Node.js

Выполните следующую команду для запуска приложения:

node https_server.js

Теперь ваше приложение обслуживает трафик по HTTPS. Для промышленного развертывания запускайте его под управлением менеджера процессов (например, PM2 или службы systemd), чтобы оно автоматически перезапускалось и переживало перезагрузки.

Шаг 4: Проверьте установку SSL

Проверьте установку SSL на наличие возможных ошибок или уязвимостей с помощью одного из наших инструментов SSL Checker. Вы также можете подтвердить цепочку через командную строку:

echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -issuer -dates

Это выводит издателя сертификата и даты его действия, подтверждая, что ваш сервер Node.js предоставляет правильный сертификат.

Где купить SSL-сертификат для Node.js?

SSL Dragon — это ваш источник для всех потребностей в SSL. Мы предлагаем одни из самых низких цен на рынке по всему ассортименту продуктов SSL и сотрудничаем с лучшими SSL-брендами отрасли для обеспечения надежной безопасности и специализированной поддержки. Все наши SSL-сертификаты полностью совместимы с приложениями Node.js.

Быстрый выпуск, надежное шифрование, доверие 99,99% браузеров, специализированная поддержка и гарантия возврата денег в течение 25 дней.

Часто задаваемые вопросы

Как включить HTTPS в Node.js?

Используйте встроенный модуль https. Прочитайте ваш приватный ключ и сертификат полной цепочки с помощью fs.readFileSync(), передайте их как параметры key и cert функции https.createServer() и вызовите .listen(443). Node.js берет на себя рукопожатие TLS; отдельный веб-сервер для настройки не требуется.

Нужен ли параметр ca в Node.js?

Промежуточная цепочка должна передаваться, но для этого не обязательно нужен параметр ca. Самый простой подход — объединить сертификат вашего домена и CA-пакет в один файл полной цепочки и указать на него в параметре cert. Используйте массив ca, только если вы предпочитаете хранить сертификат и промежуточные сертификаты в отдельных файлах.

Почему мой сервер Node.js не может привязаться к порту 443?

В Linux и macOS порты ниже 1024 являются привилегированными. Прямая привязка к порту 443 требует повышенных прав, поэтому во многих конфигурациях Node.js запускается на высоком порту, например 8443, за обратным прокси-сервером (Nginx или балансировщиком нагрузки), который завершает или перенаправляет TLS. В среде разработки просто измените значение, передаваемое в listen().

Могу ли я использовать import вместо require для HTTPS-сервера?

Да. CommonJS (require) работает во всех поддерживаемых версиях Node.js, но если ваш проект настроен как ES-модуль («type»: «module» в файле package.json или файл с расширением .mjs), вы можете вместо этого использовать import https from ‘node:https’. Параметры TLS в обоих случаях одинаковы.

Как проверить, что SSL-сертификат работает на Node.js?

Откройте ваш сайт в браузере и проверьте наличие значка замка, запустите проверку с помощью наших инструментов SSL Checker или выполните запрос из терминала с помощью echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com, чтобы изучить сертификат, предоставляемый сервером.

Итог

Установка SSL-сертификата на Node.js сводится к созданию сертификата полной цепочки, его чтению вместе с приватным ключом с помощью fs.readFileSync(), передаче их в https.createServer() с параметром minVersion: ‘TLSv1.2’ и запуску приложения с помощью команды node https_server.js.

Сначала нужен сертификат? Ознакомьтесь с нашими SSL-сертификатами.

Сэкономьте 10% на SSL-сертификатах при заказе сегодня!

Быстрая выдача, надежное шифрование, 99,99% доверия к браузеру, специализированная поддержка и 25-дневная гарантия возврата денег. Код купона: SAVE10

Детальное изображение дракона в полете
Написано

Опытный автор контента, специализирующийся на SSL-сертификатах. Превращает сложные темы кибербезопасности в понятный, увлекательный контент. Вносите свой вклад в повышение уровня цифровой безопасности с помощью впечатляющих рассказов.

Avatar of Sergiu Rosca
Technical Review by Sergiu Rosca

Sergiu Rosca is the core web developer behind SSL Dragon. He manages the technical infrastructure, platform performance, and backend integrations that keep the site running smoothly and securely. At SSL Dragon, Sergiu shares practical insights on web development, site optimization, and technical troubleshooting.

All SSL Dragon installation guides are tested on live server environments and undergo a strict peer-review process to ensure your infrastructure remains secure. Read our full Editorial Policy.