Как работает HTTPS и TLS-рукопожатие?
- Как браузер проверяет сертификат сайта?
- Зачем в TLS и асимметричное, и симметричное шифрование?
- Что такое TLS 1.3 и чем он лучше 1.2?
TLS даёт шифрование, целостность и подлинность сервера. В рукопожатии стороны согласуют общий ключ (обмен Диффи — Хеллмана), сервер доказывает владение сертификатом, дальше данные шифруются быстрым симметричным шифром.
- Сертификат подписан удостоверяющим центром, браузер проверяет цепочку до доверенного корня и имя домена
- TLS 1.3: 1 RTT на рукопожатие, 0-RTT при повторе, только стойкие шифры с прямой секретностью
- Асимметрия — чтобы договориться о ключе, симметрия — чтобы быстро шифровать
А ещё mTLS — сертификат предъявляет и клиент; в сервисах внутри компании
Подробно
Что защищает TLS:
- конфиденциальность — посредник видит только адреса и объём;
- целостность — подменённый байт обнаружится (AEAD-шифры: AES-GCM, ChaCha20-Poly1305);
- подлинность — клиент уверен, что говорит с владельцем домена.
Рукопожатие TLS 1.3 (после TCP-рукопожатия):
- ClientHello — поддерживаемые шифры, случайное число, публичная часть ключа Диффи — Хеллмана (на эллиптических кривых, X25519), имя сервера (SNI);
- ServerHello — выбранный шифр и своя публичная часть DH. Теперь обе стороны независимо вычисляют общий секрет, не передавая его по сети. Дальше всё зашифровано;
- сервер шлёт сертификат и CertificateVerify — подпись хода рукопожатия своим закрытым ключом: доказательство, что ключ у него;
- обе стороны шлют 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).
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗TLS шифрует все данные асимметричным шифром на протяжении всей сессии
- ✗Сертификат сервера не проверяется браузером, если соединение шифрованное
- ✓Стороны согласуют общий ключ, сервер подтверждает сертификат, дальше — симметричный шифр
- ✗TLS 1.3 требует трёх оборотов на рукопожатие, TLS 1.2 — одного
Что спросят дальше
Разбор темы
- HTTP и HTTPS — методы, коды ответа, версии
Методы и идемпотентность, группы кодов ответа, REST, отличия HTTP/1.1, HTTP/2 и HTTP/3, как HTTPS защищает соединение.
- TCP изнутри — рукопожатие, надёжность и перегрузка
Как устанавливается и закрывается соединение, откуда TIME_WAIT, как TCP гарантирует доставку и не перегружает сеть, что добавляет TLS.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.