TLS 1.3 vs TLS 1.2: differenze pratiche

Le due versioni TLS oggi attive

TLS 1.2, pubblicato nel 2008 (RFC 5246), e TLS 1.3, finalizzato nel 2018 (RFC 8446), sono le uniche due versioni TLS considerate sicure e ancora in uso massivo. TLS 1.3 non è una piccola evoluzione: rappresenta una riprogettazione profonda del protocollo, con vantaggi misurabili in sicurezza, performance e semplicità.

Riduzione del handshake

Il cambiamento più tangibile è la velocità di apertura della connessione. TLS 1.2 richiede due round trip tra client e server prima che possano scambiarsi dati cifrati: ClientHello, ServerHello con certificato, scambio chiavi, conferma. TLS 1.3 riduce a un solo round trip combinando i passaggi: il client invia subito i suoi parametri di key exchange, il server risponde con tutto il necessario.

Su connessioni mobile o satellite, dove la latenza domina sul throughput, la differenza è netta: 100-300 ms risparmiati su ogni handshake nuovo.

0-RTT (Zero Round Trip Time)

TLS 1.3 introduce il 0-RTT: se client e server si sono già parlati in passato, il client può inviare dati cifrati già nel primo pacchetto, senza nessun round trip preliminare. È usato da CDN come Cloudflare per accelerare ulteriormente le visite ripetute.

Attenzione: il 0-RTT è vulnerabile ad attacchi replay e va abilitato solo per richieste idempotenti (GET). POST e transazioni richiedono il flusso classico.

Cipher suite

TLS 1.2 ha una giungla di cipher suite, molti dei quali deboli o legacy: oltre 300 combinazioni possibili. TLS 1.3 ne mantiene solo cinque, tutte basate su AEAD (Authenticated Encryption with Associated Data) e con Forward Secrecy obbligatoria:

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_CCM_SHA256
  • TLS_AES_128_CCM_8_SHA256

La configurazione del server è banale: niente più liste da curare, niente più cipher deboli da disabilitare manualmente.

Algoritmi rimossi

TLS 1.3 elimina algoritmi e meccanismi storicamente problematici:

  • RSA key exchange (no Forward Secrecy)
  • Static Diffie-Hellman
  • SHA-1
  • MD5
  • RC4, 3DES, DES, IDEA
  • CBC mode senza AEAD
  • Renegotiation TLS
  • Compression TLS (vulnerabile a CRIME)

Forward Secrecy obbligatoria

In TLS 1.2 la Forward Secrecy era opzionale: cipher suite con RSA key exchange consentivano di decifrare retroattivamente il traffico se la chiave privata fosse stata compromessa. TLS 1.3 la rende obbligatoria: ogni sessione usa chiavi effimere ECDHE, e il traffico passato resta sicuro anche se la chiave a lungo termine viene rubata.

Certificate cifrato

In TLS 1.2 il certificato del server viaggia in chiaro durante l'handshake, esponendo informazioni sull'identità a osservatori passivi. TLS 1.3 cifra il certificato dopo il ServerHello, riducendo la leakage di metadati. È un piccolo miglioramento di privacy, importante in contesti censurati.

Compatibilità client

TLS 1.3 è supportato da:

  • Chrome 70+, Firefox 63+, Safari 12.1+, Edge 79+
  • OpenSSL 1.1.1+, BoringSSL, LibreSSL 3.2+
  • Java 11+, .NET Core 3.0+, Python 3.7+
  • Android 10+, iOS 12.2+

I client più vecchi falleranno il negotiation TLS 1.3 e ricadranno su TLS 1.2. Mantieni entrambe le versioni attive per coprire la coda lunga di client legacy.

Configurazione

Su Nginx 1.13+:

ssl_protocols TLSv1.2 TLSv1.3;

Su Apache 2.4.37+ con OpenSSL 1.1.1+ TLS 1.3 è supportato automaticamente nelle direttive SSLProtocol.

Quando upgrade

Se il tuo stack è ragionevolmente moderno (kernel 4.x+, OpenSSL 1.1.1+, web server aggiornato), TLS 1.3 va abilitato subito. Non comporta lavoro aggiuntivo e migliora sia la performance sia la sicurezza.

Hai bisogno di aiuto?

Se vuoi gestione SSL dal team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?