> Что такое HTTPS и как он работает (JavaScript)

Уровень: junior · Роль: frontend · Язык: JavaScript · Категория: Технические вопросы

Компании: QueenInteractiveGamesLtd

Стек: Node.js, JavaScript

> Пример ответа

Короткий ответ

HTTPS (HyperText Transfer Protocol Secure) - это защищённая версия HTTP, использующая шифрование через TLS/SSL. Он работает путём установления зашифрованного соединения между клиентом и сервером, что предотвращает перехват и подмену данных. Перед передачей данных происходит handshake, в ходе которого стороны обмениваются сертификатами и согласовывают ключи шифрования. Это обеспечивает конфиденциальность, целостность и аутентификацию.

Подробное объяснение

HTTPS добавляет слой безопасности поверх HTTP с помощью протоколов TLS (Transport Layer Security) или его предшественника SSL (Secure Sockets Layer). Основные этапы работы:

  1. Установление соединения: клиент (браузер) отправляет запрос на сервер по порту 443 (по умолчанию для HTTPS).
  2. TLS handshake:
    • Клиент и сервер обмениваются поддерживаемыми версиями TLS, наборами шифров и случайными числами.
    • Сервер отправляет свой цифровой сертификат, содержащий публичный ключ и информацию о владельце.
    • Клиент проверяет сертификат через центр сертификации (CA) - это гарантирует, что сервер действительно тот, за кого себя выдаёт.
  3. Генерация сессионного ключа: клиент создаёт pre-master secret, шифрует его публичным ключом сервера и отправляет обратно. Только сервер может расшифровать его своим приватным ключом.
  4. Симметричное шифрование: обе стороны используют полученный сессионный ключ для шифрования всех последующих данных. Это быстрее, чем асимметричное шифрование.

В результате данные передаются в зашифрованном виде, и даже при перехвате злоумышленник не сможет их прочитать или изменить.

На практике

Для frontend-разработчика HTTPS важен в следующих аспектах:

  • API-запросы: все fetch-запросы к серверу должны идти через HTTPS, иначе браузер может блокировать смешанный контент (mixed content).
  • Service Workers: они работают только на HTTPS, так как имеют доступ к перехвату запросов.
  • Cookies: cookie с флагом Secure передаются только по HTTPS.
  • HSTS (HTTP Strict Transport Security): сервер может указать браузеру всегда использовать HTTPS для данного домена.

На серверной стороне (Node.js) обычно используют готовые решения, например, https модуль или настройку в Express через reverse proxy (Nginx, Caddy), который берёт на себя TLS termination.

Пример кода

JAVASCRIPT
// Простой HTTPS сервер на Node.js (для демонстрации)
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('private-key.pem'),
cert: fs.readFileSync('certificate.pem')
};
https.createServer(options, (req, res) => {
res.writeHead(200);
res.end('Hello, HTTPS!');
}).listen(443);

На практике сертификаты получают от Let's Encrypt или другого CA, а в production используют reverse proxy, который обрабатывает TLS.

Как отвечать на собеседовании

Начни с краткого определения, затем опиши handshake. Упомяни, что HTTPS использует комбинацию асимметричного (для обмена ключами) и симметричного (для данных) шифрования. Подчеркни важность проверки сертификатов через CA. Если спросят про отличия от HTTP, скажи про порт 443 vs 80 и про шифрование. Для frontend-роли добавь про mixed content и Secure cookies.

Что проверяет интервьюер

  • Понимание базовой криптографии: различие между симметричным и асимметричным шифрованием.
  • Знание протокола: этапы handshake, роль сертификатов и CA.
  • Практические аспекты: почему HTTPS обязателен для современных веб-приложений, как это влияет на frontend (fetch, service workers, cookies).
  • Умение объяснять сложные вещи простыми словами.

Типичные ошибки

  • Путать HTTPS с SSL/TLS: HTTPS - это протокол прикладного уровня, а TLS - транспортный протокол безопасности.
  • Думать, что HTTPS шифрует URL полностью: домен и порт видны, шифруется только путь и параметры.
  • Не упоминать проверку сертификатов: без неё HTTPS не гарантирует аутентичность сервера.
  • Считать, что HTTPS защищает от всех атак: он не предотвращает XSS, CSRF или утечки на стороне сервера.
  • Забывать про mixed content: загрузка HTTP-ресурсов на HTTPS-странице снижает безопасность.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью