Ответ
Безопасность HTTPS обеспечивается криптографическим протоколом TLS (или его устаревшим предшественником SSL), который работает поверх TCP. Он решает три основные задачи:
- Шифрование: Данные между клиентом и сервером передаются в зашифрованном виде, что защищает их от перехвата и прочтения (конфиденциальность).
- Аутентификация: Сервер (а при необходимости и клиент) предъявляет цифровой сертификат, выпущенный доверенным Центром сертификации (CA). Это подтверждает, что вы соединяетесь с настоящим сайтом, а не с поддельным.
- Целостность данных: Используются криптографические хеш-функции (MAC — Message Authentication Code), чтобы гарантировать, что данные не были изменены при передаче (целостность).
Кратко о процессе (Handshake):
- Клиент и сервер согласовывают параметры шифрования.
- Сервер отправляет свой сертификат для проверки.
- Клиент генерирует ключ сессии, шифрует его открытым ключом сервера из сертификата и отправляет его.
- Далее обмен данными идет с использованием симметричного шифрования (более быстрого) с этим общим сессионным ключом.
Пример проверки валидности сертификата в Python:
import requests
# Параметр `verify=True` включает проверку SSL-сертификата по доверенным CA
response = requests.get('https://example.com', verify=True)
# Если сертификат невалиден, будет выброшено исключение `requests.exceptions.SSLError`