За счет чего обеспечивается повышенная безопасность при использовании HTTPS по сравнению с HTTP?

«За счет чего обеспечивается повышенная безопасность при использовании HTTPS по сравнению с HTTP?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTPS (HTTP over TLS/SSL) обеспечивает повышенную безопасность за счет криптографического протокола TLS (или его предшественника SSL), который добавляет три ключевые защиты поверх обычного HTTP:

1. Шифрование (Confidentiality):

  • Как: Используются симметричные алгоритмы шифрования (AES, ChaCha20) для данных сессии. Ключ для этого шифрования безопасно обменивается при помощи асимметричной криптографии (RSA, ECDHE) во время рукопожатия TLS.
  • Результат: Перехватив трафик, злоумышленник увидит только зашифрованный поток, что защищает от кражи логинов, cookies, персональных данных.

2. Аутентификация (Authentication):

  • Как: Сервер предъявляет клиенту цифровой сертификат X.509, выпущенный доверенным Удостоверяющим Центром (CA). Клиент проверяет подпись CA и соответствие имени в сертификате домену сайта.
  • Результат: Пользователь может быть уверен, что подключился именно к bank.com, а не к фишинговому сайту. В двухстороннем (mutual) TLS аутентифицируется и клиент.

3. Целостность данных (Integrity):

  • Как: Для каждого передаваемого блока данных вычисляется криптографический код аутентификации сообщения (MAC), например, с использованием HMAC. Получатель проверяет этот код.
  • Результат: Гарантируется, что данные не были изменены при передаче (ни случайно, ни злонамеренно).

Практический пример настройки безопасного TLS в Nginx:

server {
    listen 443 ssl http2;
    server_name example.com;

    # Сертификаты, выпущенные CA (например, Let's Encrypt)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # Современные безопасные протоколы и шифры
    ssl_protocols TLSv1.2 TLSv1.3; # Отключаем устаревшие SSLv3, TLSv1.0, TLSv1.1
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;

    # HSTS - принудительное использование HTTPS браузером
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
}

Для DevOps критически важно:

  • Автоматизировать выпуск и обновление сертификатов (с помощью Certbot, cert-manager в Kubernetes).
  • Сканировать конфигурации на уязвимости (например, слабые шифры) с помощью инструментов вроде sslabs или testssl.sh.
  • Внедрять HTTPS на всех этапах CI/CD пайплайна, включая внутренний трафик между микросервисами (service mesh).