Quel comportamento non fa parte di TLS v1.2
But it doesn't explicitly state why the handshake has failed.
Non può. Non è definito come parte del protocollo (TLS v1.2).
Quando il server o il client decidono di interrompere una connessione, possono scegliere tra uno dei diversi messaggi alert
.
Un messaggio di Alert
ha un aspetto simile a questo :
struct {
AlertLevel level;
AlertDescription description;
} Alert;
AlertLevel
ha una larghezza di un byte e ha solo due stati:
enum { warning(1), fatal(2), (255) } AlertLevel;
E AlertDescription
è anch'essa larga un byte. Ma dei 256 possibili motivi, solo 30 vengono assegnati e utilizzati . E di questi 30, semplicemente non ce n'è, che si adatta a "Ehi, ti ho detto che volevo un certificato client, perché non me ne hai dato uno?!?" -bill.
(E anche se sembra che possa andare bene, no_certificate_RESERVED(41)
è stato usato per qualcos'altro. Ovvero in SSLv3.0 è stato usato per l'altra direzione: per il CLIENTE per dire al server "Scusa, posso Ti diamo un certificato client. ")
Ora per la domanda più profonda "Non avrebbe senso definire un tale codice di motivazione se ci sono ancora molti punti inutilizzati nel codice? Invece di solo un fallimento difficile, in gran parte inspiegabile?" la mia risposta è semplicemente: "Non lo so."
Non vedo come un tale avviso possa rendere il protocollo più debole, ma la crittografia è complicata e non ne sono sicuro.
Loadbalancer per dare un messaggio di errore amichevole
Ma cosa succede se vuoi dare un messaggio di errore amichevole?
AFAIK, quindi devi fare cose un po 'complicate con la logica loadbalancer e solo inizialmente consentire la connessione clientcert-less, ma poi reindirizzare immediatamente a una pagina di errore. Apache può fare una cosa del genere con una regola simile a questa :
RewriteCond %{SSL:SSL_CLIENT_VERIFY} !^SUCCESS$
RewriteRule .* /help/ssl-client-auth-required.html [L]
IIS definisce un messaggio eror HTTP chiamato 403.7 Forbidden: Client Certificate Required
. Penso che questa sia una mossa intelligente (meglio che fallire, almeno), anche se il .7
di 403.7
non è standard e penso che il messaggio di errore appartenga al livello TLS e non al livello HTTP.