Pular para conteúdo

Projeto 09: Inspeção e Hardening de Conexões TLS 1.3 🌐

Escopo do Projeto

Objetivo: Projetar e validar um túnel de comunicação seguro baseado no protocolo TLS 1.3, implementando Perfect Forward Secrecy (PFS), cipher suites modernos e Mutual TLS (mTLS).


🎯 1. Contexto & Desafio Prático

A proteção de dados em trânsito é o pilar central das comunicações modernas na Internet. Neste projeto, você configurará e inspecionará uma terminação TLS 1.3 de alta segurança para microsserviços, eliminando cifras legadas suscetíveis a ataques conhecidos (BEAST, POODLE, ROBOT) e garantindo autenticação mútua rigorosa entre clientes corporativos e o backend.


📋 2. Requisitos Técnicos Obrigatórios

  • R1 (Aperto de Mão TLS 1.3 - Handshake 1-RTT): Mapear o fluxo de handshake TLS 1.3 demonstrando a redução de latência para 1-RTT e a remoção de negociações inseguras em texto plano.
  • R2 (Hardening de Cipher Suites): Restringir estritamente as cifras permitidas a TLS_AES_256_GCM_SHA384 e TLS_CHACHA20_POLY1305_SHA256, desabilitando TLS 1.0, 1.1 e 1.2.
  • R3 (Autenticação Mútua - mTLS): Configurar validação bidirecional onde tanto o cliente quanto o servidor validam seus respectivos certificados emitidos por uma autoridade certificadora (CA) raiz interna.
  • R4 (Headers de Proteção de Rede): Configurar cabeçalhos HSTS (Strict-Transport-Security) com max-age de 1 ano e diretivas includeSubDomains e preload.

📐 3. Diagrama Conceitual & Arquitetura

sequenceDiagram
    autonumber
    participant Client as Cliente mTLS
    participant Server as Gateway TLS 1.3
    Client->>Server: ClientHello (Supported Groups, Key Share ECDHE, Cipher Suites)
    Server-->>Client: ServerHello (Key Share) + EncryptedExtensions + Certificate Request
    Server-->>Client: Certificate + CertificateVerify + Finished
    Note over Client,Server: Chave de Sessão Efêmera Derivada (PFS)
    Client->>Server: Certificate (Cliente) + CertificateVerify + Finished
    Note over Client,Server: Canal Cifrado Estabelecido em 1-RTT
    Client->>Server: Requisição HTTP/2 Segura (mTLS Validado)
    Server-->>Client: Resposta Protegida (HSTS Ativo)

💻 4. Especificação Técnica & Código de Referência

// tls_hardened_context.py
import ssl
import socket

def create_hardened_ssl_context(ca_cert_path: str, server_cert_path: str, server_key_path: str) -> ssl.SSLContext:
    """Cria um contexto TLS 1.3 ultrasseguro com suporte a mTLS e cifras modernas."""
    context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)

    # Impor estritamente TLS 1.3
    context.minimum_version = ssl.TLSVersion.TLSv1_3
    context.maximum_version = ssl.TLSVersion.TLSv1_3

    # Cipher suites modernas recomendadas pelo NIST
    context.set_ciphers('TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256')

    # Exigir autenticação mútua do cliente (mTLS)
    context.verify_mode = ssl.CERT_REQUIRED
    context.load_verify_locations(cafile=ca_cert_path)

    # Carregar certificado e chave privada do servidor
    context.load_cert_chain(certfile=server_cert_path, keyfile=server_key_path)

    # Opções adicionais de hardening contra side-channel
    context.options |= ssl.OP_NO_COMPRESSION
    context.options |= ssl.OP_CIPHER_SERVER_PREFERENCE
    return context

if __name__ == '__main__':
    print("Módulo de contexto TLS 1.3 de alta segurança inicializado com sucesso.")

📦 5. Critérios de Avaliação e Entrega

  1. Handshake TLS 1.3 e eliminação de cifras legadas devidamente especificados.
  2. Configuração de autenticação mútua (mTLS) com validação de CA interna.
  3. Inclusão de políticas de cabeçalhos HSTS para mitigação de downgrade.