Что такое mTLS (Mutual TLS)?

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

Ответ

Mutual TLS (mTLS) — это протокол взаимной аутентификации, расширяющий стандартный TLS. В отличие от обычного HTTPS, где сервер предъявляет сертификат клиенту, в mTLS и клиент, и сервер доказывают свою подлинность друг другу с помощью цифровых сертификатов.

Как это работает на практике в инфраструктуре:

  1. Handshake с взаимной проверкой: Во время TLS handshake сервер запрашивает сертификат клиента, а клиент — сертификат сервера. Каждая сторона проверяет подпись и цепочку доверия (Certificate Authority, CA) представленного сертификата.
  2. Настройка на стороне сервера (например, Nginx):
    server {
        listen 443 ssl;
        ssl_certificate /etc/ssl/server.crt;
        ssl_certificate_key /etc/ssl/server.key;
        # Указываем корневой сертификат (CA), которым подписаны доверенные клиентские сертификаты
        ssl_client_certificate /etc/ssl/trusted-ca.crt;
        # Включаем обязательную проверку клиентского сертификата
        ssl_verify_client on;
        # Опционально: проверять отзыв сертификатов (OCSP Stapling)
        ssl_stapling on;
        ssl_stapling_verify on;
    }
  3. Генерация клиентских сертификатов (пример через OpenSSL):
    # Генерация приватного ключа и CSR для клиента
    openssl req -new -newkey rsa:2048 -nodes -keyout client.key -out client.csr
    # Подпись CSR корневым CA (который добавлен в ssl_client_certificate)
    openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365
    # Клиент использует связку client.crt и client.key для подключения

Типичные сценарии использования в DevOps:

  • Защита service mesh (например, Istio): Все межсервисные коммуникации внутри кластера аутентифицируются через mTLS.
  • API-шлюзы и микросервисы: Обеспечение строгой аутентификации между внутренними сервисами, заменяя или дополняя токены.
  • Доступ к внутренним административным панелям (Kubernetes Dashboard, Prometheus, etc): Вместо паролей доступ по предварительно выданным сертификатам.
  • IoT и устройства: Аутентификация устройств в облаке с помощью уникальных сертификатов.

Ключевое преимущество: mTLS обеспечивает аутентификацию на сетевом уровне, что значительно усложняет проведение атак типа "злоумышленник в середине" (MITM) по сравнению с аутентификацией только на уровне приложения.