"Client" e "Server" sono solo nomi formali per i ruoli in situazioni in cui esiste un'asimmetria naturale. Vale a dire, si parla prima: quello è il "cliente".
Ecco come va in SSL : il protocollo è definito per operare su un mezzo di trasporto bidirezionale. Una delle entità parla per prima e invia un messaggio ClientHello
. Non esiste un requisito assoluto che la nozione di "client" e "server" utilizzata da SSL corrisponda alle nozioni di "client" e "server" per la connessione sottostante quando quella connessione è un socket TCP su Internet. Succede proprio in questo modo.
In generale, qualsiasi protocollo di autenticazione tra due sistemi (chiamiamoli "A" e "B") funziona inviando messaggi tra loro e uno dei sistemi sarà il primo a parlare. Finché sia A sia B sanno chi deve parlare per primo, attraverso alcune convenzioni , allora il protocollo funzionerà. La convenzione è facile da ottenere quando c'è un'asimmetria, ad es. il software su una macchina non è lo stesso del software sull'altra. Ad esempio, per il Web, un sistema utilizza un browser Web (ad esempio Firefox) mentre l'altro utilizza un server Web (ad es. Apache) e gli standard definiscono cosa si suppone da fare.
Immagina una telefonata . Qualcuno compone il numero dell'altro. Il comportamento normale è che la persona che riceve la chiamata parlerà per prima (e dirà "ciao"). Questo è esattamente il concetto che desideri. Se queste due persone parlanti vogliono eseguire un protocollo di autenticazione, dovranno concordare i rispettivi ruoli (possono chiamarsi "client" e "server" se questo è il loro desiderio). L'utilizzo dell'asimmetria dialer / ricevitore è un modo naturale per avviare questa convenzione. Ma potevano usare qualsiasi altra convenzione; per esempio, potrebbero usare l'ordine lessicografico dei loro nomi (Alice è il "cliente" e
Bob "server" perché "A" è prima di "B" nell'alfabeto); o la loro data di nascita; oppure possono provare casualmente; o qualsiasi altra cosa.
Detto questo, nel caso specifico di SSL, normalmente ci sono certificati e la macchina con il ruolo "server" mostra un certificato al "client"; il "client" può anche mostrare un certificato al "server". I certificati dimostrano vincoli tra le chiavi e le identità, ma questo ha valore solo se l'identità ha un significato. Ad esempio, quando il server mostra il suo certificato al client, il punto importante è che il certificato del server contiene il nome server e il client si aspetta un nome server molto specifico (quello dall'URL). Allo stesso modo, quando il client mostra il suo certificato al server, questo rende utile l'autenticazione solo se il server riesce a trovare nel certificato una nozione di identità che ha senso per lui.
Una situazione più interessante con SSL è SRP : con questa variante, nessun certificato. Client e server si autenticano reciprocamente relativamente alla loro conoscenza di un segreto condiviso (una password). Devono ancora essere d'accordo su chi parla per primo! E c'è un punto in più, che è l'entità con il ruolo "server" non ha bisogno di memorizzare la password stessa, solo una sua versione hash (con qualche struttura algebrica). In questo senso, chi assume il ruolo di "server" non è del tutto arbitrario per quanto riguarda la sicurezza: anche in un protocollo di autenticazione reciproco , le caratteristiche di sicurezza ottenute su entrambi i lati possono essere diverse.