TLS viene utilizzato per proteggere la comunicazione tra client e server. I dati dell'applicazione sono crittografati con chiavi che sono univoche per ogni connessione e che vengono create durante la parte di scambio delle chiavi nell'handshake TLS. Lo scambio di chiavi è costruito in modo che sia l'input da client e server sia utilizzato per creare le chiavi e quindi nessun lato ha il pieno controllo sulle chiavi di crittografia.
Il metodo di scambio chiavi consigliato è Diffie-Hellman e anche questo è l'unico disponibile in TLS 1.3. Nessuna chiave privata del server viene nemmeno utilizzata durante lo scambio di chiavi e quindi la chiave privata del server non influisce sul modo in cui i dati vengono crittografati. Ciò significa anche che non c'è modo di pre-crittografare i dati utilizzando in qualche modo la chiave privata. La chiave privata viene utilizzata solo per l'autenticazione, ad esempio per assicurarsi che il client stia effettivamente effettuando l'accesso al server corretto.
E mentre nel vecchio metodo di scambio di chiavi RSA la chiave privata del server è coinvolta per proteggere la chiave scambiata, non influenza la chiave che viene creata e quindi in questo caso non è possibile precriptare i contenuti.
In altre parole: il punto principale della chiave privata è quello di fornire l'autenticazione per assicurarsi che il client stia parlando con il server corretto. Questa autenticazione è fatta firmando una sorta di sfida con questa chiave privata e dimostrando così la proprietà di questa chiave. Poiché questa sfida è unica per ogni sessione TLS, il server deve in qualche modo avere accesso alla chiave privata e non può semplicemente offrire contenuti pre-firmati.
Tuttavia, in teoria è possibile utilizzare un certificato per firmare tutto il contenuto statico che si possiede e quindi trasferire questo contenuto firmato su un semplice HTTP. Ciò non proteggerebbe il contenuto dallo sniffare ma lo proteggerà contro la manipolazione. Mentre questo tipo di protezione è al di fuori di TLS è possibile trovare qualcosa di simile ad esempio nella posta (S / MIME o PGP). Tuttavia, ha bisogno di un client che verificherà tali firme ma attualmente non esiste un tale client. Ma in realtà esiste una bozza Internet che va nella direzione di ciò che desideri: Firma dei messaggi HTTP
draft-Cavage-http-firme .