За счет чего обеспечивается безопасность соединения по протоколу HTTPS?

«За счет чего обеспечивается безопасность соединения по протоколу HTTPS?» — вопрос из категории Тестирование безопасности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Безопасность HTTPS обеспечивается криптографическим протоколом TLS (или его устаревшим предшественником SSL), который работает поверх TCP. Он решает три основные задачи:

  1. Шифрование: Данные между клиентом и сервером передаются в зашифрованном виде, что защищает их от перехвата и прочтения (конфиденциальность).
  2. Аутентификация: Сервер (а при необходимости и клиент) предъявляет цифровой сертификат, выпущенный доверенным Центром сертификации (CA). Это подтверждает, что вы соединяетесь с настоящим сайтом, а не с поддельным.
  3. Целостность данных: Используются криптографические хеш-функции (MAC — Message Authentication Code), чтобы гарантировать, что данные не были изменены при передаче (целостность).

Кратко о процессе (Handshake):

  • Клиент и сервер согласовывают параметры шифрования.
  • Сервер отправляет свой сертификат для проверки.
  • Клиент генерирует ключ сессии, шифрует его открытым ключом сервера из сертификата и отправляет его.
  • Далее обмен данными идет с использованием симметричного шифрования (более быстрого) с этим общим сессионным ключом.

Пример проверки валидности сертификата в Python:

import requests
# Параметр `verify=True` включает проверку SSL-сертификата по доверенным CA
response = requests.get('https://example.com', verify=True)
# Если сертификат невалиден, будет выброшено исключение `requests.exceptions.SSLError`