Terminazione SSL e bilanciatori
Breve riepilogo
La terminazione SSL/TLS rimuove il carico di crittografia dalle applicazioni e apre la strada al routing L7, WAF, rate-limit, mTLS, release canarie. Soluzioni chiave: dove completare TLS (edge/ingress/dentro mesh), come bilanciare (L4 vs L7), quali profili di cifrario utilizzare, come aggiornare i certificati senza downtime e come mantenere p95 latitanza e errori in SLO.
Dove completare TLS
Al bordo (CDN/Anycast/WAF) - Latitudine minima all'utente, protezione globale, kash/bot control. La parte successiva è re-encrypt fino al backend.
Su ingress L7 (Nginx/Avvoy/HAProxy/ALB): routing sottile per URI/intestazioni, mTLS, convalida JWT.
TLS (passthrough L4): quando si richiede end-to-end fino a pod/servizio (ad esempio, zona di compilazione rigorosa).
Servizio Mesh (Avvoy/Istio/Linkerd) - mTLS automatizzato all'interno del cluster, delle regole e della telemetria.
Pratica: più frequente - edge terminate da re-encrypt a ingress; per i pagamenti PII - prima del servizio.
Bilanciamento L4 vs L7
L4 (TCP/UDP) - Ritardo minimo, semplice health-checks (porta/TSD), passthrough TLS. È adatto per un gRPC TLS in caso di mancanza di L7-Fich.
L7 (HTTP/HTTPS/HTTP3): routing host/percorso/intestazioni/cookie, WAF, rate-limits, release canarie, sticky sessioni, retrai/timeout.
TLS versioni, chiavi, codici
Versione TLS 1. 3 ovunque, TLS 1. 2 come fallback. Spegnete 1. 0/1. 1.
Chiavi/serti: ECDSA (P-256) - più veloce di RSA; è possibile utilizzare il doppio stack (ECDSA + RSA) per il vecchio.
ALPN: `h2` и `http/1. 1`; per HTTP/3 - 'h3' (QUIC/UDP).
OCSP Stapling - Includi; HSTS su domini pubblici.
Pool di chiavi: memorizzazione in KMS/HSM; estensione automatica (ASME/Albero di fiducia).
0-RTT (TLS 1. 3) - Includere i punti (GET/idipotenti), tenere conto del rischio replay.
Profilo base cifrato (TLS 1. 2): `ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305`
Prestazioni TLS
Resumption: sessione tickets/IDS - riduce il costo handshake.
ECDSA + ChaCha20 aiutano sul mobile/senza AES-NI.
OCSP Stapling + scorciatoie riducono p95.
HTTP/2/3: multiplexing, meno connessioni sotto p95.
Offload: pin core CPU sotto crypto, abilitare reuseport, tune socket-buffer.
Sicurezza
mTLS: richieda client-cert per le operatrici/API degli operatori; CRL/OCSP da richiamare.
SNI/ECH: standard SNI; ECH (Encr. ClientHello) nasconde il dominio (se supportato dal provider edge).
Strict Port Security (HSTS) - domini prod, con cautela alla partenza.
TLS tra hop-ami: re-encrypt prima del servizio, anche all'interno di DC (Zero-Trust).
Rate-limit/gri-buoi: su L7 proteggono gli api dai bot/brutforte.
Osservabilità e SLO
SLO (esempi)
p95 TLS-handshake da 80 a 120 mc (globale), p95 TTFB da 200 a 300 mc.
Gli errori TLS (handshake/peer-verify) sono 0. 1%.
La percentuale di è pari al 70% per le visite ripetute.
Metriche
`handshake_time`, `tls_version`, `alpn`, `cert_expiry_days`, `ocsp_staple_status`.
L7: `p50/p95/p99`, `5xx`, `429`, `upstream_rq_time`, `retry_budget`.
Capacity: connettori attivi, CPS (connessioni per secondo), RPS.
Configi tipici
Nginx (L7 terminate + HTTP/2 + OCSP stapling)
nginx server {
listen 443 ssl http2 reuseport;
server_name api.example.com;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:...:ECDHE-RSA-CHACHA20-POLY1305';
ssl_ecdh_curve X25519:P-256;
ssl_certificate /etc/ssl/cert.pem; # полная цепочка ssl_certificate_key /etc/ssl/key.pem;
ssl_stapling on; ssl_stapling_verify on;
ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
proxy_pass https://upstream_pool;
}
}
upstream upstream_pool {
zone backends 64k;
server 10.0.1.10:8443 max_fails=3 fail_timeout=10s;
server 10.0.1.11:8443 max_fails=3 fail_timeout=10s;
keepalive 256;
}
HAProxy (L7 terminate + stick + mTLS a backend)
haproxy frontend fe_https bind:443 ssl crt /etc/haproxy/certs/ alpn h2,http/1.1 mode http http-response set-header Strict-Transport-Security max-age=31536000 default_backend be_api
backend be_api mode http balance roundrobin cookie SRV insert indirect nocache option httpchk GET /healthz server s1 10.0.1.10:8443 check ssl verify required ca-file /etc/haproxy/ca.pem server s2 10.0.1.11:8443 check ssl verify required ca-file /etc/haproxy/ca.pem
Avvoy (L7 terminate + mTLS da client + canarino)
yaml static_resources:
listeners:
- name: https address: { socket_address: { address: 0.0.0.0, port_value: 443 } }
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager stat_prefix: ingress route_config:
virtual_hosts:
- name: api domains: ["api.example.com"]
routes:
- match: { prefix: "/" }
route:
weighted_clusters:
clusters:
- name: api-stable weight: 95
- name: api-canary weight: 5 http_filters:
- name: envoy.filters.http.router transport_socket:
name: envoy.transport_sockets.tls typed_config:
"@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext common_tls_context:
tls_certificates:
- certificate_chain: { filename: "/etc/tls/cert.pem" }
private_key: { filename: "/etc/tls/key.pem" }
validation_context: # mTLS (опционально)
trusted_ca: { filename: "/etc/tls/ca.pem" }
require_client_certificate: true
AWS ALB/NLB (concept)
ALB (L7 terminate): HTTPS listener 443 (TLS 1. 2/1. 3), target group HTTPs:8443, health-check `/healthz`, stickiness (cookie).
NLB (L4 passthrough): TLS listener 443, TCP health-checks, SNI end-end fino a pod.
CloudFront/Cloudflare: TLS edge + WAF + Bot Management; origin — HTTPS only.
Aggiornamento certificati senza downtime
ACME (Let's Encrypt/CA privato) con aggiornamento automatico e riavvio a caldo (Nginx 'reload', SDS).
Doppi certificati (ECDSA + RSA) per le migrazioni.
Controllo catene - Verifica CA intermedia OCSP stapling dopo la rotazione.
Alert: 'cert _ expiry _ days <21' e 'ocsp _ status! = good'.
Health-checks e routing
L4: TCP connect, TLS handshake.
L7: HTTP 200/JSON, gRPC health.
Criteri: failover, weighted, latency, consistent-hash (cookie/IP) per sticky.
Retrai/timeout - Bilanciamento tra resistenza e duplicati di query (idampotenza!).
Kubernets-pattern
Ingress Controller (Nginx/Avvoy/HAProxy) - Terminazione su ingress, 'ExternalDNS' per record DNS, 'cert-manager' per ACME.
Gateway API - TLSRout/HTTPRoute dichiarativi con canarini.
Servizio Mesh: automatico, regole a / .
Assegno-foglio di protezione
- TLS 1. 3 abilitato; 1. 0/1. 1 spento.
- Codici moderni; I cerotti ECDSA sono dove il supporto è disponibile.
- OCSP stapling, catene complete, HSTS.
- mTLS per ammiragli/interconnessi; ricreazione dei cerchi dei clienti.
- Rate-limit/bot-filtri sul bordo; protezione da slowloris/oversized headers.
- Re-encrypt a backend (Zero-Trust).
- Segreti/chiavi in KMS/HSM; rotazione e controllo del rilascio.
Osservabilità e alert
Метрики: TLS handshakes/sec, failure rate, session resumption rate, OCSP, p95/99, open conns, CPS, RPS.
Logi: SNI/ALPN/versione TLS, cipher, certificato client (per il mTLS), codici upstream, latency breakdown.
Alert: altezza 5xx/525, caduta respumption, 'cert _ expiry _ days', 'ocsp _ failed', eccesso di p95, picchi '429'.
Errori tipici
Terminazione sul bordo e plain HTTP all'interno senza protezione.
Catene CA eccessivamente lunghe per la crescita p95 handshake.
Nessuna OCSP stapling bloccata su client/browser.
Le sessioni Sticky non tengono conto del failover «fluttuare» su un nodo degradato.
0-RTT è abilitato per le richieste di modifica per il rischio di reimpostazione.
L'assenza di serpi hot-reload ha → i drop di secondi durante la rotazione.
Particolare per iGaming/Fintech
Picchi (tornei/partite): riscaldamento delle sessioni TLS (pre-connect), catene brevi, alta percentuale di respumption, HTTP/2/3 per i fronti.
Gateway di pagamento/PSP: mTLS, ciphers/versioni rigorose, pinned CA, singoli domini/ALB con regole rigide.
Filtri antifrod/bot: L7-rate-limit su IP/ASN/device-fingerprint, grie-vola canarie (challenge/capcha) su un dominio separato.
Regolazione: HSTS, registri di controllo delle impostazioni TLS, report di versione, resoconto dei server client sugli incidenti.
Mini playbook
Rilascio canario tramite L7-bilanciatore
1. Aggiungi il cluster api-canary con un peso del 5%; 2) Monitorare i p95/errori; 3) 5→25→50→100%; 4) rotazione automatica in caso di degrado.
Rotazione di emergenza del certificato
1. Scaricare il nuovo cert/key; 2) 'reload'senza caduta dei connettori (SDS/hot-swap); 3) controllo OCSP; 4) dashboard p95 handshake.
Abilitazione HTTP/3
1. Aprite UDP/443; 2) Aggiungi ALPN 'h3'; 3) singole metriche QUIC loss/RTT; 4) A/B per quota di clienti.
Totale
Terminazione SSL efficiente è un profilo TLS moderno, il punto di completamento corretto, routing L7 intelligente, osservabilità e sicurezza rigorosa (mTLS, HSTS, re-encrypt). Fissate tutto nel IaC, automatizzate le rotazioni, misurate il p95/errore e usate i canarini, in modo che il fronte sopravviva ai picchi e sia prevedibilmente veloce e sicuro.