Получить доступ

Как работает HTTPS и TLS-рукопожатие?

MiddleСети
Ещё спрашивают так:
  • Как браузер проверяет сертификат сайта?
  • Зачем в TLS и асимметричное, и симметричное шифрование?
  • Что такое TLS 1.3 и чем он лучше 1.2?
Коротко

TLS даёт шифрование, целостность и подлинность сервера. В рукопожатии стороны согласуют общий ключ (обмен Диффи — Хеллмана), сервер доказывает владение сертификатом, дальше данные шифруются быстрым симметричным шифром.

  • Сертификат подписан удостоверяющим центром, браузер проверяет цепочку до доверенного корня и имя домена
  • TLS 1.3: 1 RTT на рукопожатие, 0-RTT при повторе, только стойкие шифры с прямой секретностью
  • Асимметрия — чтобы договориться о ключе, симметрия — чтобы быстро шифровать

А ещё mTLS — сертификат предъявляет и клиент; в сервисах внутри компании

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Что защищает TLS:

  • конфиденциальность — посредник видит только адреса и объём;
  • целостность — подменённый байт обнаружится (AEAD-шифры: AES-GCM, ChaCha20-Poly1305);
  • подлинность — клиент уверен, что говорит с владельцем домена.

Рукопожатие TLS 1.3 (после TCP-рукопожатия):

  1. ClientHello — поддерживаемые шифры, случайное число, публичная часть ключа Диффи — Хеллмана (на эллиптических кривых, X25519), имя сервера (SNI);
  2. ServerHello — выбранный шифр и своя публичная часть DH. Теперь обе стороны независимо вычисляют общий секрет, не передавая его по сети. Дальше всё зашифровано;
  3. сервер шлёт сертификат и CertificateVerify — подпись хода рукопожатия своим закрытым ключом: доказательство, что ключ у него;
  4. обе стороны шлют Finished, и клиент может сразу отправлять запрос — один RTT от начала.

Проверка сертификата. Сертификат связывает домен с публичным ключом и подписан удостоверяющим центром (CA). Браузер проверяет цепочку подписей до корневого сертификата из доверенного хранилища ОС или браузера, срок действия, совпадение имени (SAN) и отзыв. Самоподписанный сертификат не проходит проверку, потому что цепочка не ведёт к доверенному корню.

Почему две криптографии. Асимметричные операции медленные, поэтому используются только в рукопожатии — для согласования ключа и подписи. Данные шифруются симметричным шифром с этим общим ключом — это быстро, AES ускорен аппаратно.

Прямая секретность. Ключ сессии получается из эфемерных ключей DH и не зависит от закрытого ключа сертификата. Утечка ключа сервера потом не позволит расшифровать записанный ранее трафик. В TLS 1.3 это обязательно; в 1.2 был режим с RSA-обменом без прямой секретности.

TLS 1.3 против 1.2: рукопожатие за 1 RTT вместо 2, 0-RTT при возобновлении (с риском повтора запроса — только для идемпотентных), выкинуты устаревшие шифры и RSA-обмен, зашифрована большая часть рукопожатия.

На практике TLS обычно терминируют на балансировщике или ingress; между сервисами — mTLS через service mesh. Сертификаты выпускают автоматически (Let's Encrypt, ACME) — срок жизни короткий.

Пример

$ openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | grep -E "Protocol|Cipher|subject|issuer"
subject=CN = example.com
issuer=C = US, O = DigiCert Inc, CN = DigiCert Global G3 TLS ECC SHA384 2020 CA1
Protocol  : TLSv1.3
Cipher    : TLS_AES_256_GCM_SHA384

Что хотят услышать

  • Три свойства: конфиденциальность, целостность, подлинность.
  • Обмен ключом без передачи ключа, подпись сервера, затем симметричное шифрование.
  • Проверка сертификата: цепочка до корня, имя, срок.
  • TLS 1.3: 1 RTT, прямая секретность; 0-RTT и его риск — плюс.

Частые ошибки

  • «Браузер шифрует данные публичным ключом сервера» — так данные не шифруют.
  • Считать, что HTTPS скрывает, к какому домену идёт запрос (SNI и DNS видны, если не ECH/DoH).

Что спросят дальше

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем