логотип PurpleSchool
логотип PurpleSchool

Настройка HTTPS в React приложении

Автор

Мария Беловецкая

Введение

В современном веб-разработке защита пользовательских данных становится одной из ключевых задач. Именно поэтому использование HTTPS (HyperText Transfer Protocol Secure) обязательно для любых приложений, обрабатывающих личные данные пользователей, авторизацию или даже просто отправляющих данные на сервер. Реализация HTTPS увеличивает доверие к вашему приложению, обеспечивает конфиденциальность передаваемой информации и помогает избежать многих проблем безопасности.

Если вы создаете приложение на React, скорее всего на этапе разработки вы используете локальный сервер, например, встроенный в create-react-app или свои собственные сборочные скрипты. Однако часто встает вопрос: как запустить React-приложение локально по HTTPS? Не менее важный этап — организация безопасной работы в продакшн, когда ваше приложение деплоится на хостинг или облако.

Здесь вы найдете пошаговые инструкции, примеры и советы, которые помогут вам настроить HTTPS как для разработки, так и для боевого режима.

Подключение HTTPS для локальной разработки

Когда вы работаете над приложением на React, чаще всего для быстрого старта используется Create React App. В нем есть встроенная поддержка HTTPS на уровне dev-сервера. Однако, если вы используете другие сборщики или хотите интегрировать с вашим собственным сервером (например, Express), настройка может отличаться.

Включение HTTPS в Create React App

Первое, что вам нужно сделать — это установить переменную окружения HTTPS в значение true. Есть два способа сделать это:

1. Старт с командой

Можно запустить сервер разработки с помощью одной команды в терминале:

HTTPS=true npm start
# Или для Yarn
HTTPS=true yarn start

В Windows возможно потребуется использовать утилиты для установки переменных окружения, например:

set HTTPS=true&&npm start

2. Использование файла .env

Создайте в корне проекта файл .env (если он еще не существует) и добавьте:

HTTPS=true

Теперь при каждом запуске npm start или yarn start приложение будет доступно на https://localhost:3000 (3000 — стандартный порт).

Самоподписанные сертификаты для локального сервера

По умолчанию, когда вы запускаете сервер на HTTPS, используется автоматически сгенерированный самоподписанный сертификат. Браузер предупредит вас, что соединение не защищено, потому что этот сертификат не доверенный. Для разработки достаточно добавить исключение, но если хочется избавиться от предупреждения, можно создать свои сертификаты и “доверить” их системе.

Настройка HTTPS является важной для обеспечения безопасности React-приложений, особенно если они работают с конфиденциальными данными. HTTPS шифрует трафик между клиентом и сервером, защищая его от перехвата и изменений. Если вы хотите научиться настраивать HTTPS в React-приложении и обеспечивать безопасность данных — приходите на наш большой курс Основы React, React Router и Redux Toolkit. На курсе 177 уроков и 17 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Генерация сертификата с помощью OpenSSL

Смотрите, я покажу вам базовую команду:

# Создаем приватный ключ
openssl genrsa -out localhost.key 2048

# Создаем запрос на сертификат
openssl req -new -key localhost.key -out localhost.csr

# Создаем самоподписанный сертификат
openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt

В результате у вас появятся файлы: localhost.key (ключ), localhost.crt (сертификат).

Использование собственного сертификата в Create React App

Добавьте следующие переменные в .env:

SSL_CRT_FILE=путь/до/localhost.crt
SSL_KEY_FILE=путь/до/localhost.key
HTTPS=true

Теперь приложение будет использовать именно эти сертификаты. Это полезно, если вы хотите повторить инфраструктуру продакшн уже на локальной машине.

Что делать, если браузер все равно ругается?

Понадобится добавить сертификат в доверенные на вашей системе. В macOS достаточно дважды щелкнуть по .crt и добавить в Keychain Access, в Windows — импортировать через “Диспетчер сертификатов”.

Настройка HTTPS на сервере в продакшн

Локальная разработка важна, но самое главное — это корректно развернуть приложение с поддержкой HTTPS на сервере. Здесь у вас несколько вариантов, в зависимости от выбранной инфраструктуры.

Использование прокси сервера (Nginx/Apache)

Обычно React-приложение билдится в статические файлы (npm run build), которые затем раздаются через такой веб-сервер, как Nginx или Apache. Он же занимается обработкой HTTPS и делегирует статику браузеру.

Генерация бесплатного сертификата Let's Encrypt

Let's Encrypt — отличное бесплатное решение для получения доверенных сертификатов. Очень часто используется с инструментом certbot.

sudo apt update
sudo apt install certbot python3-certbot-nginx # Для Nginx

Если сайт уже настроен (например, /etc/nginx/sites-available/your-site), сертификат получается одной командой:

sudo certbot --nginx -d ваш_домен

Nginx сам обновит конфиг. Вот как может выглядеть секция:

server {
    listen 443 ssl;
    server_name ваш_домен;

    ssl_certificate /etc/letsencrypt/live/ваш_домен/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ваш_домен/privkey.pem;

    root /var/www/react-app/build;
    index index.html;

    location / {
        try_files $uri /index.html;
    }
}

Принудительное перенаправление с HTTP на HTTPS

Обычно добавляют отдельный блок в Nginx:

server {
    listen 80;
    server_name ваш_домен;
    return 301 https://$host$request_uri;
}

Теперь все обращения по HTTP попадут на HTTPS.

Хостинг и автоматизация сертификатов

Многие хостинги поддерживают автоматическую установку сертификатов — DevOps не требуется. В пользовательских панелях обычно можно просто “включить HTTPS”.

Использование собственного Express-сервера

Если вы, например, комбинируете React front-end и API на Node.js (Express), вы можете поднять свой сервер с поддержкой HTTPS.

Пример настройки Express

// Импортируем зависимости
const fs = require('fs');
const https = require('https');
const express = require('express');
const path = require('path');

const app = express();

// Путь до билдов React
app.use(express.static(path.join(__dirname, 'build')));

// Любой маршрут возвращает index.html
app.get('/*', function (req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

// Чтение ваших сертификатов
const options = {
  key: fs.readFileSync('/путь/до/privkey.pem'),  // приватный ключ
  cert: fs.readFileSync('/путь/до/cert.pem'),    // сертификат
};

https.createServer(options, app).listen(443, () => {
  // Сервер доступен по HTTPS
  console.log('HTTPS сервер на порту 443');
});

Теперь ваш сервер обслуживает React приложение именно по HTTPS.

Особенности работы за прокси (Cloudflare, Heroku)

Многие современные облачные решения делают проксирование: входящий трафик поступает на защищенный сервер, а дальше до вашего backend или статики доходит уже по внутренней защищенной линии.

  • Heroku — сертифицирует сам, вы не управляете сертификатами напрямую.
  • Vercel, Netlify — предлагают HTTPS “из коробки”.

Cloudflare

Если вы используете Cloudflare как DNS-провайдера и CDN, настройка HTTPS выполняется на их панели. Там же можно активировать “Full SSL”, чтобы ваш сервер тоже требовал защищенного соединения.

Настройки безопасности для React-приложения

Настроить HTTPS — это только часть истории. Если хотите повысить защищенность — посмотрите еще на следующие меры:

HTTP Strict Transport Security (HSTS)

HSTS сообщает браузеру, что к сайту всегда нужно обращаться только по HTTPS. Для Nginx:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Content Security Policy

Чтобы защититься от XSS-атак, используйте CSP-заголовки:

add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none';";

Secure Cookies и SameSite

Если ваше приложение использует куки, устанавливайте флаг Secure:

// Пример для Express
res.cookie('token', token, {
  httpOnly: true,     // доступ только с сервера
  secure: true,       // только по HTTPS
  sameSite: 'strict'  // защита от CSRF
});

Проверка и отладка работы по HTTPS

Вы запустили приложение по HTTPS — но как убедиться, что все работает корректно?

  • Проверьте, что в браузере нет ошибки сертификата — если есть, убедитесь, что сертификат корректен.
  • Посмотрите консоль разработчика — никакие ли ресурсы (картинки, JS, CSS) не грузятся по HTTP.
  • Проверьте переадресацию — попробуйте зайти по http://, должно сразу перебрасывать на https://.
  • Проверяйте, что все запросы, отправляемые приложением, идут на https-адреса (особенно, если есть интеграция с API).
  • Используйте SSL Labs — этот сервис поможет вам проверить параметры и безопасность сертификата.

Заключение

Настройка HTTPS — важный этап для любого React-приложения, вне зависимости от того, только вы начали разработку или уже готовитесь к публикации. Теперь у вас есть пошаговые инструкции для разных типов серверов и среды разработки. Применяя их, вы не только обеспечиваете защиту данных пользователей, но и повышаете доверие к вашему продукту. Следите за обновлениями зависимостей, проверяйте безопасность при каждом деплое и не забывайте о дополнительной защите: HSTS, CSP и настройках куки.

HTTPS обеспечивает безопасность вашего приложения. Для создания сложных приложений необходимо уметь управлять состоянием и роутингом. На курсе Основы React, React Router и Redux Toolkit вы освоите все необходимые инструменты. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в основы React уже сегодня.

Частозадаваемые технические вопросы по теме и ответы

Как вручную доверить самоподписанный сертификат в Windows?

Откройте Windows Console (например, через Win+R и команда mmc), добавьте модуль "Certificates" для "Trusted Root Certification Authorities", затем просто импортируйте свой localhost.crt. Теперь браузеры не будут ругаться на сертификат.

Как создать валидный сертификат для локальной сети (например, для мобильного тестирования)?

Вам нужно при генерации сертификата указать Subject Alternative Names (SAN) для IP или имени устройства. Используйте конфиг для openssl, где добавляете SAN:IP=192.168.1.10.

Какой минимальный набор портов открывать для HTTPS-сервера?

Достаточно открыть только порт 443 (TCP), именно по нему работает HTTPS. Порт 80 нужен только для редиректа с HTTP на HTTPS.

Почему некоторые ресурсы загружаются по HTTP, а сайт по HTTPS?

Это смешанное содержимое (mixed content). Исправьте ссылки на ресурсы или убедитесь, что все статики и API работают только по HTTPS.

Как организовать автоматическое продление Let's Encrypt сертификата?

Обычно используется cron-задача:
bash sudo certbot renew --quiet Добавьте в cron (crontab -e), чтобы команда запускалась раз в неделю. Certbot сам обновит сертификаты и перезагрузит сервер, если нужно.

Стрелочка влевоРабота с мапами в ReactЧто такое frontend-разработка на ReactСтрелочка вправо

Постройте личный план изучения React до уровня Middle — бесплатно!

React — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по React

Открыть базу знаний

Лучшие курсы по теме

изображение курса

React и Redux Toolkit

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий