Ответ
Mutual TLS (mTLS) — это протокол взаимной аутентификации, расширяющий стандартный TLS. В отличие от обычного HTTPS, где сервер предъявляет сертификат клиенту, в mTLS и клиент, и сервер доказывают свою подлинность друг другу с помощью цифровых сертификатов.
Как это работает на практике в инфраструктуре:
- Handshake с взаимной проверкой: Во время TLS handshake сервер запрашивает сертификат клиента, а клиент — сертификат сервера. Каждая сторона проверяет подпись и цепочку доверия (Certificate Authority, CA) представленного сертификата.
- Настройка на стороне сервера (например, 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; } - Генерация клиентских сертификатов (пример через 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) по сравнению с аутентификацией только на уровне приложения.