Sobes.tech
Junior

Cos'è TLS?

sobes.tech AI

Risposta dell'AI

TLS (Transport Layer Security) è un protocollo crittografico che garantisce comunicazioni sicure in rete, ad esempio tra un browser web e un server.

Funzioni chiave:

  • Autenticazione: Verifica dell'identità delle parti (solitamente tramite certificati X.509).
  • Confidenzialità: Crittografia dei dati trasmessi per evitare accessi non autorizzati.
  • Integrità: Verifica che i dati non siano stati modificati durante la trasmissione.

Il protocollo TLS opera a livello di trasporto del modello OSI (o superiore, a seconda dell'implementazione e del contesto). Ha sostituito SSL (Secure Sockets Layer). Le versioni attuali sono TLS 1.2 e TLS 1.3.

Nel contesto di Go, TLS viene utilizzato nella libreria standard net/http per supportare HTTPS.

package main

import (
	"crypto/tls"
	"net/http"
	"log"
)

func main() {
	// Esempio di configurazione di un server HTTP con supporto TLS
	// Sono necessari file di certificato e chiave privata
	certFile := "server.crt"
	keyFile := "server.key"

	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Ciao, mondo sicuro!"))
	})

	// Avviare il server HTTPS
	log.Fatal(http.ListenAndServeTLS(":8443", certFile, keyFile, nil))
}

L'interazione avviene in più fasi (Handshake):

  1. ClientHello: Il client invia una lista di versioni TLS supportate, set di cifrari e altri parametri.
  2. ServerHello: Il server sceglie i parametri ottimali tra quelli proposti dal client.
  3. Certificate: Il server invia il suo certificato.
  4. ServerKeyExchange (opzionale): Scambio di chiavi di cifratura.
  5. CertificateRequest (opzionale): Il server può richiedere un certificato al client per l'autenticazione mutua.
  6. ServerHelloDone: Il server comunica di aver terminato la sua parte di Handshake.
  7. Certificate (opzionale): Il client invia il suo certificato.
  8. ClientKeyExchange: Il client invia un segreto pre-maestro cifrato con la chiave pubblica del server, usato per generare le chiavi di sessione.
  9. CertificateVerify (opzionale): Il client verifica la firma del server.
  10. ChangeCipherSpec: Il client e il server comunicano di passare all'uso delle chiavi di sessione concordate.
  11. Finished: Finalizzazione del Handshake con lo scambio di messaggi cifrati con le nuove chiavi, per verificare il successo della procedura.

TLS garantisce un livello affidabile di sicurezza per le comunicazioni di rete, essendo uno standard per HTTPS e altri protocolli che richiedono protezione dei dati.