Что такое TLS и SSL?

«Что такое TLS и SSL?» — вопрос из категории Безопасность, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TLS (Transport Layer Security) и его предшественник SSL (Secure Sockets Layer) — это криптографические протоколы, обеспечивающие безопасную, зашифрованную и аутентифицированную передачу данных по сети. SSL устарел и считается небезопасным, его следует заменять на TLS.

Основные функции с точки зрения DevOps:

  1. Шифрование: Защита данных от перехвата (конфиденциальность).
  2. Аутентификация: Убеждённость клиента, что он подключился к настоящему серверу (и наоборот, при mutual TLS). Обычно через сертификаты, выпущенные доверенным центром сертификации (CA).
  3. Целостность данных: Гарантия, что данные не были изменены при передаче (используются коды аутентификации сообщений — MAC).

Практическое применение в инфраструктуре:

  • Защита веб-трафика (HTTPS): Настройка TLS на ingress-контроллерах (Nginx, Traefik), load balancer'ах (AWS ALB/NLB) или непосредственно на сервисах.
  • Взаимодействие между сервисами (mTLS): Используется в service mesh (например, Istio) для аутентификации и шифрования трафика "сервис-сервис" внутри кластера.
  • Защита баз данных и других внутренних соединений.

Пример настройки современного TLS в Nginx (актуальные best practices):

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name example.com;

    # Пути к сертификатам (например, от 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;

    # Предпочтительные современные шифры
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Параметры безопасности (HSTS, безопасная переадресация)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    # ... остальная конфигурация ...
}

# Принудительный редирект с HTTP на HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

Ключевые инструменты DevOps для работы с TLS: openssl (для проверки, создания CSR), certbot (для автоматического получения сертификатов Let's Encrypt), HashiCorp Vault (для динамической выдачи сертификатов).