27 Gennaio 2022
Expand search form

Cos’è l’autenticazione reciproca TLS?

Una storia che spiega i problemi risolti dai certificati TLS e X509

Andrew Howden

Più recentemente ho dovuto impostare l’autenticazione reciproca TLS tra un server MySQL e una replica, il che mi ha dato la prima possibilità di immergermi veramente nell’impostazione e nell’esecuzione di una CA, e nell’implementazione dell’autenticazione reciproca.

È stata una bella esperienza di apprendimento, e mi piacerebbe ricapitolare ed espandere alcune delle cose che ho imparato. Prima di tutto, lasciatemi dire: Questo non è progettato per essere un riflesso accurato al 100% delle specifiche. Piuttosto, è semplificato in alcuni punti per costruire astrazioni. Si spera che dove i termini sono menzionati ci siano collegamenti che possono essere usati per trovare un significato più concreto.

Quando si concettualizza come i computer comunicano, è ragionevole assumere che i messaggi vengano inviati direttamente da un computer all’altro. Il computer “Alice” invia un sito web al computer “Bob”:

Tuttavia, non è così che succede. È estremamente raro che due computer siano collegati direttamente l’uno all’altro; normalmente, ci sono molti computer intermediari (spesso chiamati “router” o “firewall” o qualsiasi altro nome simile ad apparecchiatura”). Assomiglia di più a:

Questo presenta ai computer Alice e Bob un problema. In primo luogo, non possono essere sicuri che i computer tra Alice e Bob non abbiano registrato ciò che viene detto, e se Alice invia un messaggio al computer “Bob”, “Bob” non può essere sicuro che il messaggio apparentemente inviato dal computer “Alice” sia stato effettivamente inviato da “Alice”, né che sia stato inviato senza modifiche.

Fortunatamente, c’è un meccanismo per risolvere esattamente questo problema.

Il Transport layer security (o “TLS”) e il suo predecessore secure sockets layer (o “SSL”) esistono dal

1996 per risolvere questo problema. Come identificato in precedenza, ci sono due serie di problemi che devono essere risolti:

Garantire che i dati non siano leggibili dagli intermediari

Al fine di garantire che i dati non vengano letti dai computer che si trovano tra una connessione di rete e l’altra, i dati vengono criptati. La crittografia è il processo di codifica di un messaggio in modo che solo coloro che dovrebbero essere in grado di leggerlo e capirlo possano leggerlo e capirlo. Per passare le informazioni avanti e indietro, i due computer devono decidere come codificare i dati in modo che solo loro possano capirli, e i computer intermediari no.

Per iniziare a condividere i segreti con Bob, Alice deve conoscere un modo per codificare i dati in modo che solo Bob possa decodificarli. Questo è un problema di uova e galline; se i dati fossero codificati, cambiare la codifica sarebbe facile! Tuttavia, non abbiamo né polli né uova, ed è ancora un problema difficile. La soluzione sta in un processo chiamato “crittografia a chiave pubblica”.

Senza andare troppo in profondità su come funziona, sappiate che Bob ha un riferimento per decodificare le informazioni segrete. Il riferimento di Bob è diviso in due metà:

  • Una metà “pubblica”, che contiene il riferimento per codificare i dati, e
  • Una metà “privata”, che contiene il riferimento per decodificare i dati

Questo permette a Bob di inviare la metà pubblica di questo riferimento ad Alice, che può usarlo per codificare e inviare informazioni che solo Bob può leggere. Questi riferimenti sono chiamati “chiavi” – una chiave pubblica e una chiave privata.

Nel primo passo, Alice deve chiedere la chiave pubblica di Bob. Questo processo, chiamato crittografia asimmetricasi presenta come segue:

Tuttavia, questo processo ha una debolezza: non permette a Bob di inviare messaggi ad Alice che solo lei può leggere. Per rimandare i messaggi, Bob ha bisogno di una chiave che solo Alice capisce.

Alice sa che può inviare informazioni a Bob che solo Bob può leggere. Quindi, può approfittarne per inviare a Bob delle informazioni segrete che possono essere usate sia da Alice che da Bob per codificare le informazioni avanti e indietro, l’una verso l’altra.

Queste informazioni permettono la formazione della chiave simmetrica. Questa chiave è condivisa sia da Alice che da Bob, e può essere usata per decodificare i messaggi da entrambe le parti. Questo crea la connessione segreta a due vie.

Alla fine di questo lungo processo, Alice e Bob possono entrambi inviare segreti all’altro per tutto il giorno senza preoccuparsi se qualcuno sta ascoltando la loro connessione. Non possono – solo Alice e Bob hanno una copia della chiave simmetrica di riferimento che è necessaria per decodificare questi messaggi!

Tuttavia, questo processo ha un difetto: come facciamo a sapere che Bob è effettivamente Bob?

Assicurarsi che Bob sia Bob

Negli esempi descritti, sappiamo che Alice parla con Bob attraverso una rete di computer. Tuttavia, cosa succede se uno di questi computer inizia improvvisamente a fingere di essere Bob?

Senza conoscere Bob in anticipo, è impossibile per Alice sapere che “Bob” è “Bob”. Alice inizierà semplicemente una connessione criptata con chiunque finga di essere Bob. Infatti, anche se non è mostrato qui, l’intermediario può fingere di essere Bob per Alice, e Alice per Bob! Questo è definito un “attacco Man in the middle”.

Tuttavia, c’è una parte dello standard TLS che è anche progettata per risolvere questo problema. In particolare, quando Alice indica per la prima volta a Bob che vorrebbe iniziare a parlare su una connessione codificata, non solo chiede la sua chiave pubblica ma anche che lui fornisca un certificato (sotto forma di X.509) che provi chi è. Poi chiede a un insieme di consulenti fidati chiamati “autorità di certificazione” se Bob sembra legittimo, e decide se procedere in base a ciò che queste autorità hanno da dire.

Se un certificato non è garantito da un’autorità, Alice rifiuterà semplicemente la connessione.

Assicurarsi che Alice sia Alice

Per Alice, la connessione è ora felice e abbastanza sicura. Lei sa che il Bob con cui sta parlando è il vero Bob, e che solo lei e Bob possono vedere i messaggi scambiati. Tuttavia, Bob non ha la stessa sicurezza che Alice sia Alice.

Ci sono due lati in ogni connessione:

  • Il “cliente”. In questo caso, è Alice – è lei che invia il primo messaggio.
  • Il “Server”. In questo caso, è Bob – risponde (o “serve”) i messaggi.

Verificare che Bob sia Bob è un’operazione estremamente comune. Infatti, mentre visualizzi questo post è estremamente probabile che il tuo browser abbia verificato che il sito web del blog che vedi davanti a te è il sito web del blog che afferma di essere. Verificare che Alice sia effettivamente Alice è un’operazione molto meno comune, ma è generalmente chiamata “Mutual TLS authentication” in quanto sia Alice che Bob sono verificati.

Si consideri lo scenario in cui Bob si aspetta alcuni dati sensibili, forse medici o simili, da Alice. Bob elaborerà quei dati e poi farà una diagnosi sulla condizione di Alice. In questo caso, Bob vuole assolutamente essere sicuro che Alice è la vera Alice, e non sta inventando falsi dati diagnostici!

Fortunatamente, il suddetto standard TLS può essere facilmente esteso per includere lo stesso processo di verifica per Alice e per Bob:

Ora che sia Alice che Bob hanno entrambe forti garanzie di essere chi dicono di essere (garantite dalle loro autorità di certificazione) e la connessione è criptata, si può dire che questa connessione è molto sicura.

Transport Layer Security (TLS) e il certificato X.509 possono sembrare al primo incontro come cose essenzialmente magiche che in qualche modo forniscono sicurezza, ma non è chiaro esattamente come o perché. Dopo averli implementati un paio di volte e aver fatto il debug necessario per far sì che tutto parli correttamente tra loro, diventa un compito più semplice. Speriamo che questo post sia servito a rendere il processo di debugging più facile.

Se lo avete trovato utile, contattatemi su twitter! Voglio fare altri approfondimenti sullo standard X.509, ma mi sono stancato di scrivere questo post, e ho pensato che questo fosse un punto ragionevole per finirlo per ora. Scriverò di più se la gente è interessata a leggerlo.

Potreste anche essere interessati agli argomenti

TLS fa autenticazione reciproca?

Mutual TLS, o mTLS in breve, è un metodo per l’autenticazione reciproca. … Le informazioni all’interno dei rispettivi certificati TLS forniscono un’ulteriore verifica. mTLS è spesso utilizzato in un quadro di sicurezza Zero Trust* per verificare utenti, dispositivi e server all’interno di un’organizzazione. Può anche aiutare a mantenere sicure le API.

Continua…

Cos’è l’autenticazione TLS?

Transport Layer Security (TLS) cripta i dati inviati su Internet per garantire che gli intercettatori e gli hacker non siano in grado di vedere ciò che si trasmette, il che è particolarmente utile per le informazioni private e sensibili come password, numeri di carte di credito e corrispondenza personale.

Continua…

Cos’è l’autenticazione reciproca dei certificati?

L’autenticazione reciproca, conosciuta anche come autenticazione bidirezionale, è un processo di sicurezza in cui le entità si autenticano a vicenda prima che avvenga la comunicazione effettiva. … In un processo di autenticazione reciproca, una connessione può avvenire solo se il client e il server si scambiano, verificano e si fidano l’uno dell’altro i certificati.

Continua…

Come viene implementato TLS reciproco?

Impostazione dell’autenticazione reciproca TLSCertificati esistenti. … Autorità di certificazione (CA) … Certificato dell’autorità di certificazione. … La richiesta di firma del certificato (CSR) … Il certificato del server. … Il certificato del client (infine) … Configurare NGINX. … Installare la CA nel browser.Altri articoli…-Mar 9, 2016

Continua…

Qual è la differenza tra TLS e TLS reciproco?

TLS garantisce l’identità del server al client e fornisce un canale criptato a due vie tra il server e il client. … TLS reciproco alla riscossa! È una caratteristica opzionale per TLS. Permette al server di autenticare l’identità del client.Mar 19, 2020

Continua…

TLS reciproco è sicuro?

Mutual TLS è una tecnica di autenticazione sicura ampiamente utilizzata negli ambienti aziendali per garantire l’autenticità dei client al server e viceversa. Facilita l’autenticazione tramite certificati seguita dalla creazione di un canale criptato tra le parti.

Continua…

A cosa serve TLS?

Transport Layer Security (TLS) è una parte cruciale dei protocolli di sicurezza informatica per le organizzazioni di qualsiasi dimensione, compresi i fornitori di servizi gestiti (MSP). TLS è progettato per proteggere i dati dagli hacker e aiuta a garantire che le informazioni sensibili come le password e i numeri di carte di credito siano al sicuro.30 gennaio 2020

Continua…

Cosa significa TLS?

Transport Layer Security
Transport Layer Security (TLS) è il protocollo successore di SSL. TLS è una versione migliorata di SSL. Funziona più o meno allo stesso modo di SSL, utilizzando la crittografia per proteggere il trasferimento di dati e informazioni. I due termini sono spesso usati in modo intercambiabile nell’industria anche se SSL è ancora ampiamente usato.

Continua…

Perché abbiamo bisogno di TLS reciproco?

Mutual TLS alla riscossa! È una caratteristica opzionale per TLS. Consente al server di autenticare l’identità del client.Mar 19, 2020

Continua…

TLS è un certificato?

I certificati TLS sono un tipo di certificato digitale, emesso da una Certificate Authority (CA). La CA firma il certificato, attestando di aver verificato che appartiene ai proprietari del nome di dominio oggetto del certificato.11 giu 2020

Continua…

Da cosa protegge TLS?

La crittografia TLS aiuta a proteggere le applicazioni web da manomissioni e intercettazioni di dati e sta diventando una pratica standard per la maggior parte dei siti web. … Oltre a proteggere le informazioni dei singoli utenti, TLS aiuta anche a proteggere le applicazioni web contro le violazioni dei dati e gli attacchi DDoS (distributed denial-of-service).30 gennaio 2020

Continua…

Come funziona un certificato TLS?

Ogni certificato TLS consiste in una coppia di chiavi composta da una chiave pubblica e una chiave privata. … Il browser invia indietro una chiave di sessione simmetrica e il server decifra la chiave di sessione simmetrica utilizzando la sua chiave privata. Il server invia quindi una conferma criptata con la chiave di sessione per iniziare la sessione criptata.

Continua…

Quali proprietà di sicurezza fornisce TLS?

TLS supporta molti metodi diversi per lo scambio di chiavi, la crittografia dei dati e l’autenticazione dell’integrità dei messaggi….La connessione è privata (o sicura) perché viene utilizzato un algoritmo a chiave simmetrica per crittografare i dati trasmessi. … L’identità delle parti comunicanti può essere autenticata utilizzando la crittografia a chiave pubblica.Altri articoli…

Continua…

Qual è la differenza tra SSL e TLS?

SSL è un protocollo crittografico che utilizza connessioni esplicite per stabilire una comunicazione sicura tra server web e client. Anche TLS è un protocollo crittografico che fornisce una comunicazione sicura tra server web e client tramite connessioni implicite. È il successore del protocollo SSL.Mar 23, 2020

Continua…

Come viene usato TLS?

Un caso d’uso primario di TLS è la crittografia della comunicazione tra applicazioni web e server, come i browser web che caricano un sito web. TLS può anche essere utilizzato per crittografare altre comunicazioni come e-mail, messaggistica e voice over IP (VoIP).

Continua…

Articolo precedente

Cosa si può fare con un Roux?

Articolo successivo

Quali dimensioni dovrebbe avere una botola per soffitta?

You might be interested in …

Cos’è la conoscenza indigena?

La conoscenza locale e indigena si riferisce alle conoscenze, abilità e filosofie sviluppate da società con lunghe storie di interazione con l’ambiente naturale circostante. Per le popolazioni rurali e indigene, la conoscenza locale informa il […]

Che cos’è l’altezza libera?

In un edificio, lo spazio di testa è l’altezza verticale libera (spazio verticale) che esiste dalla superficie superiore di un pavimento alla parte inferiore di un: Soffitto. Testa della porta, Soffitto delle scale. Tra due […]