TL; DR: in teoria, TLS può essere utilizzato senza chiavi private.
Una parte integrante di TLS è che il client autentica il server in modo appropriato per rilevare potenziali attacchi uomo in mezzo. Questo è comunemente fatto con i certificati - e questo richiede la chiave privata del certificato sul sito del server per dimostrare al client che il server è il proprietario del certificato 1 .
Tuttavia, TLS è flessibile e fornisce anche altri modi per autenticare il server. Esistono codici PSK che consentono l'autenticazione utilizzando una chiave pre-condivisa tra client e server. Esistono codici SRP che consentono l'autenticazione tramite password. Esistono anche anon cipres che ti consente di abbandonare qualsiasi tipo di autenticazione in-TLS, ovvero di richiedere la tua autenticazione.
Pertanto, TLS potrebbe essere utilizzato senza certificati. E poiché i certificati sono l'unica parte di TLS che richiede una chiave privata, ciò significa che TLS può essere utilizzato senza chiavi private. Ma, anche se non viene utilizzata una chiave privata, potrebbe essere necessaria una cosa segreta simile sul server: sia l'autenticazione basata su SRP che quella su PSK richiedono un segreto sul lato server che dovrebbe al massimo essere noto al server e al client.
Oltre a questo, l'autenticazione senza certificato (e quindi senza chiave privata) richiede che entrambi i lati della connessione supportino i codici rilevanti con i metodi di autenticazione alternativi. Poiché attualmente i browser supportano solo l'autenticazione basata su certificati, è necessaria una chiave privata sul lato server quando è richiesto l'accesso da un browser - praticamente ogni volta in caso di server Web.
Ad esempio, è possibile utilizzare openssl per fornire una connessione protetta TLS che non richiede certificati. Il server cercherebbe ad esempio questo:
$ openssl s_server -www -nocert -psk 1a2b3c4d
Il client dovrebbe utilizzare la stessa chiave per connettersi al server, ad esempio l'idea di base di PSK è che client e server condividono una chiave segreta:
$ openssl s_client -connect 127.0.0.1:4433 -psk 1a2b3c4d
...
Cipher : PSK-AES256-CBC-SHA
...
Verify return code: 0 (ok)
Se provassi a connetterti con un browser a questo server (cioè https://127.0.0.1:4433
) verrebbe visualizzato un errore solo perché il browser non supporta i codici PSK: ERR_SSL_VERSION_OR_CIPHER_MISMATCH
.
1 Le chiavi private non possono essere richieste solo per l'autenticazione ma anche per lo scambio di chiavi, ovvero lo scambio di chiavi RSA. Tuttavia, lo scambio di chiavi RSA richiede certificati, quindi significa nuovamente che le chiavi private sono rilevanti solo se vengono utilizzati i certificati. Inoltre, lo scambio di chiavi Diffie-Hellman non ha bisogno di certificati e questo è attualmente il metodo consigliato poiché fornisce la segretezza in avanti.