Шифрование между браузером и сервером осуществляется c использованием протокола HTTPS, который является надстройкой над HTTP с использованием протоколов SSL/TLS (Secure Sockets Layer / Transport Layer Security).
Как осуществляется шифрование сообщений между браузером и сервером?
Шифрование между браузером и сервером осуществляется c использованием протокола HTTPS, который является надстройкой над HTTP с использованием протоколов SSL/TLS (Secure Sockets Layer / Transport Layer Security).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Шифрование между браузером и сервером осуществляется c использованием протокола HTTPS, который является надстройкой над HTTP с использованием протоколов SSL/TLS (Secure Sockets Layer / Transport Layer Security).
Процесс установки защищенного соединения (Handshake):
-
Client Hello: Браузер отправляет серверу сообщение, содержащее поддерживаемые им версии SSL/TLS, список шифровальных алгоритмов (cipher suites), алгоритмы сжатия и случайное число (клиента).
-
Server Hello: Сервер выбирает наилучшую версию протокола, шифровальный набор и алгоритм сжатия из предложенных браузером, а также генерирует собственное случайное число (сервера) и отправляет их браузеру вместе со своим SSL/TLS-сертификатом.
-
Authentication: Браузер проверяет сертификат сервера:
- Доверенность корневого центра сертификации (Root CA).
- Срок действия сертификата.
- Соответствие доменного имени в сертификате адресу веб-сайта.
- Отсутствие сертификата в списке отозванных (CRL или OCSP).
-
Premaster Secret: Браузер генерирует случайное число (premaster secret), шифрует его открытым ключом сервера (из сертификата) и отправляет серверу.
-
Session Key Generation: Оба, браузер и сервер, используют клиентский (Client Random), серверный (Server Random) случайные числа и premaster secret для генерации симметричного сеансового ключа (session key).
-
Change Cipher Spec: Браузер отправляет серверу сообщение, информирующее о переходе к использованию сгенерированного сеансового ключа для дальнейшей коммуникации.
-
Finished: Браузер отправляет серверу хэш всех предыдущих сообщений рукопожатия, зашифрованный сеансовым ключом. Это сообщение проверяет корректность рукопожатия.
-
Change Cipher Spec: Сервер отправляет браузеру сообщение о переходе к зашифрованной связи.
-
Finished: Сервер отправляет браузеру хэш всех предыдущих сообщений рукопожатия, зашифрованный сеансовым ключом.
После успешного рукопожатия вся последующая передача данных между браузером и сервером происходит с использованием симметричного шифрования на основе сгенерированного сеансового ключа. Симметричное шифрование гораздо производительнее асимметричного, что делает его подходящим для шифрования больших объемов данных.
Применяемые алгоритмы (пример):
- Асимметричное шифрование (для обмена сеансовым ключом): RSA, Diffie-Hellman (DH), Elliptic Curve Diffie-Hellman (ECDH).
- Симметричное шифрование (для шифрования данных): AES, 3DES, ChaCha20.
- Хэширование (для проверки целостности сообщений): SHA-256, SHA-384.