← Назад к вопросам

Как работает HTTPS?

2.0 Middle🔥 111 комментариев
#Сети и протоколы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

HTTPS: Безопасная передача данных в интернете

HTTPS (HyperText Transfer Protocol Secure) — это расширение протокола HTTP с добавлением шифрования данных. Все данные между браузером и сервером передаются в зашифрованном виде, что защищает их от перехвата и подслушивания на публичных сетях.

Как работает HTTPS: TLS Handshake

Когда клиент подключается к HTTPS серверу, происходит следующее:

1. Client Hello

Клиент отправляет запрос подключения с версией TLS и списком поддерживаемых алгоритмов шифрования.

2. Server Hello

Сервер выбирает наиболее безопасный алгоритм и отправляет свой SSL/TLS сертификат.

3. Certificate Verification

Браузер проверяет сертификат:

  • Выдан ли доверенной Certificate Authority (ЦА)?
  • Для правильного ли домена?
  • Не истёк ли срок действия?
  • Подпись корректна ли?

Если проверка не пройдёт — браузер показывает warning.

4. Key Exchange (Рукопожатие ключей)

Клиент и сервер договариваются о сессионном ключе для симметричного шифрования.

5. Finished

Обе стороны подтверждают успешное шифрование. После этого весь трафик шифруется.

Асимметричное шифрование (Public Key Cryptography)

SSL сертификат содержит два ключа:

Public Key (публичный ключ):

  • Известен всем, включая клиентов
  • Используется для шифрования данных
  • Нельзя использовать для расшифровки

Private Key (приватный ключ):

  • Хранится только на сервере (строго секретно!)
  • Используется для расшифровки данных
  • Если приватный ключ украден — безопасность нарушена

Процесс:

Клиент:   Шифруем данные публичным ключом → [зашифрованные данные]
Сервер:   Расшифровываем приватным ключом ← [зашифрованные данные]

SSL/TLS Сертификат

Это электронный документ, подписанный доверенной Certificate Authority, который подтверждает подлинность сервера. Содержит:

  • Common Name (CN) — домен, для которого выдан (example.com)
  • Subject Alternative Names (SAN) — дополнительные домены
  • Public Key — публичный ключ сервера
  • Validity Period — срок действия (обычно 1 год)
  • Issuer — кто выдал (например, Let's Encrypt, DigiCert)
  • Digital Signature — подпись ЦА (гарантия подлинности)
  • Serial Number — уникальный идентификатор

Отличие HTTP vs HTTPS

СвойствоHTTPHTTPS
ШифрованиеНЕТДА (TLS)
БезопасностьНизкаяОчень высокая
СкоростьБыстрееНемного медленнее (шифрование требует CPU)
СертификатНе требуетсяТребуется
Порт80443
ПерехватываемостьЛегко на публичном Wi-FiПрактически невозможно
Видимость пароляВидны в трафикеЗашифрованы

Почему HTTPS критичен

1. Защита от перехвата данных

HTTP (небезопасно):
Клиент → [username=john&password=secret123] → Публичный Wi-Fi → Хакер → Сервер

Любой на сети может перехватить пароль и логин!

HTTPS (безопасно):
Клиент → [шифрованные данные: ^^^^&&&&****] → Публичный Wi-Fi → Сервер

Даже если перехвачены, данные не читаемы

2. Защита от Man-in-the-Middle (MITM) атак

Без HTTPS злоумышленник может подделать сервер и выдать себя за него. HTTPS сертификат защищает от этого.

3. Аутентификация сервера

Браузер проверяет, что вы действительно подключены к google.com, а не к поддельному сайту.

Проверка сертификатов в Python

import requests
from requests.exceptions import SSLError

# HTTPS запрос с проверкой сертификата (по умолчанию) ✓
response = requests.get("https://api.example.com/users")
# Сертификат автоматически проверяется

# Отключить проверку (НЕБЕЗОПАСНО, только для локального тестирования)
response = requests.get(
    "https://localhost:8443/users",
    verify=False  # Не проверять сертификат
)

# Использовать custom сертификат (клиентский)
response = requests.get(
    "https://api.example.com/users",
    cert=("/path/to/client_cert.pem", "/path/to/client_key.pem")
)

# Обработка ошибок сертификата
try:
    response = requests.get("https://api.example.com/users")
except SSLError as e:
    print(f"Ошибка сертификата: {e}")

Best Practices для QA-тестирования

Production окружение

def test_api_production():
    # Всегда проверяем сертификат в production!
    response = requests.get(
        "https://api.example.com/users",
        verify=True  # Проверяем сертификат
    )
    assert response.status_code == 200

Локальное тестирование

def test_local_api():
    # На localhost с самоподписанным сертификатом отключаем проверку
    response = requests.get(
        "https://localhost:8443/users",
        verify=False  # Локальный сертификат
    )
    assert response.status_code == 200

Выводы

HTTPS — это стандарт безопасности для интернета:

  • Все данные передаются в зашифрованном виде
  • Сертификаты подтверждают подлинность сервера
  • Защищает от перехвата данных на публичных сетях
  • Защищает от MITM атак и подделки серверов
  • В 2024+ году HTTPS обязателен для всех сайтов
  • Браузеры показывают warning при отсутствии HTTPS

Для QA: всегда проверяйте, что ваши API используют HTTPS и что сертификаты корректны!

Как работает HTTPS? | PrepBro