Ответ
HTTPS — это не отдельный протокол, а HTTP, работающий поверх криптографического протокола TLS (или его устаревшего предшественника SSL). Он обеспечивает конфиденциальность, целостность и аутентификацию данных.
Основные этапы установки защищённого соединения (TLS Handshake):
- Client Hello: Браузер отправляет серверу информацию: поддерживаемые версии TLS и наборы шифров (cipher suites), а также случайное число.
- Server Hello: Сервер отвечает, выбирая версию TLS и cipher suite, и отправляет своё случайное число и SSL-сертификат. Этот сертификат содержит публичный ключ сервера и подписан доверенным Центром сертификации (CA).
- Проверка сертификата: Клиент проверяет подпись сертификата по цепочке доверия до корневого CA. Это подтверждает, что сервер является тем, за кого себя выдаёт.
- Обмен ключами: Клиент генерирует pre-master secret, шифрует его публичным ключом сервера из сертификата и отправляет серверу. Только сервер, обладающий соответствующим приватным ключом, может его расшифровать.
- Генерация сессионных ключей: И клиент, и сервер, используя оба случайных числа и pre-master secret, независимо вычисляют идентичные сессионные ключи. Эти симметричные ключи будут использоваться для шифрования всего трафика этой сессии.
- Завершение рукопожатия: Стороны обмениваются сообщениями, зашифрованными новыми сессионными ключами, подтверждая, что handshake прошёл успешно.
После handshake начинается обмен зашифрованными HTTP-данными с использованием быстрого симметричного шифрования (например, AES).
Пример на PHP: валидация SSL-сертификата при запросе к внешнему API
$context = stream_context_create([
'ssl' => [
'verify_peer' => true, // Включить проверку
'verify_peer_name' => true, // Проверить совпадение имени хоста
'cafile' => '/etc/ssl/certs/ca-certificates.crt', // Путь к bundle корневых CA
'allow_self_signed' => false // Запретить самоподписанные сертификаты
]
]);
// Если сертификат невалиден, будет выброшено исключение
$response = file_get_contents('https://secure-api.example.com/data', false, $context);
Ключевые преимущества HTTPS:
- Шифрование: Защита от перехвата данных (например, логинов, платежных данных).
- Целостность: Данные не могут быть незаметно изменены при передаче (защита от MITM-атак).
- Аутентификация: Пользователь уверен, что общается с настоящим сервером, а не с поддельным.