В полном TLS 1.3 handshake клиент и сервер через ClientHello/ServerHello согласуют параметры и материал для ключей. Затем сервер отдельными зашифрованными сообщениями передаёт сертификат, CertificateVerify и Finished. Клиент проверяет доверие, имя сервера, подпись и Finished, затем отправляет свой Finished. HTTP-данные защищаются симметричными ключами. Для HTTP/3 TLS 1.3 встроен в QUIC, а не работает поверх TCP.
Как устанавливается HTTPS-соединение и проходит TLS handshake?
Полное рукопожатие TLS 1.3 с сертификатом сервера: согласование ключей, проверка подлинности и Finished. Почему HTTP/3 нужно рассматривать отдельно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Уточню сценарий: полное рукопожатие TLS 1.3 с сертификатом сервера, ECDHE и без 0-RTT, а не возобновление ранее установленной сессии. Для HTTPS поверх HTTP/1.1 или HTTP/2 сначала требуется соединение TCP; адрес сервера при необходимости получают через DNS.
Далее происходит следующее:
- ClientHello. Клиент предлагает версии TLS, наборы шифров, поддерживаемые группы и подписи, передаёт key share для согласования секрета. В расширениях могут передаваться имя сервера и предложения прикладных протоколов ALPN.
- ServerHello. Сервер выбирает параметры и передаёт свою key share. Стороны вычисляют общий секрет и производные ключи защиты рукопожатия. Закрытые ключи по сети не отправляются. Сертификат не является частью ServerHello.
- Сервер отправляет защищённые сообщения EncryptedExtensions, Certificate, CertificateVerify и Finished. CertificateVerify подтверждает владение закрытым ключом и связывает аутентификацию с рукопожатием. Finished подтверждает целостность его истории и знание соответствующего секрета.
- Клиент проверяет цепочку сертификатов, срок действия, соответствие имени сервера, подпись CertificateVerify и Finished. После успешных проверок отправляет свой Finished. HTTP-данные передаются с защитой отдельными симметричными ключами прикладного трафика.
Порядок сообщений приведён в RFC 8446. При взаимной TLS-аутентификации добавляются сертификат и доказательство владения ключом клиента; обычный HTTPS этого не требует. Детали TLS 1.2, возобновления и 0-RTT нельзя механически смешивать с этой последовательностью.
HTTP/3 использует QUIC поверх UDP. В него встроено рукопожатие TLS 1.3, однако защиту пакетов обеспечивает QUIC: привычная схема «TCP, затем TLS records» здесь не применяется. Разделение описано в RFC 9001.