Non è possibile eseguire l'identificazione prima che il certificato sia inviato, poiché l'intero punto del certificato è quello di stabilire l'identità. Quindi se potessi stabilire l'identità del server prima di ricevere il certificato, quale sarebbe il punto di convalidare il certificato contro il server? Questo è in realtà un altro punto, un certificato è per un dominio, quindi un client dovrebbe sempre verificare che il dominio nel cert corrisponda al dominio a cui si sta connettendo. Quindi, tecnicamente, se provo a connettermi a evil.com su HTTPS e tu mi dai il certificato per google.com, non dovrei convalidare il certificato (anche se le implementazioni sono note per omettere questo controllo !!). E come hai detto tu, potresti inviare un certificato che non è il tuo, e se il client (erroneamente) convalida questo certificato, il client invia quindi un segreto crittografato sotto la chiave pubblica contenuta in tale certificato all'attaccante. L'autore dell'attacco non è in grado di decrittografare questi dati poiché non ha la chiave privata. A questo punto l'utente malintenzionato non è in grado di ricavare chiavi simmetriche dal segreto che il client ha inviato (poiché non può decrittografare il segreto) e di conseguenza non è in grado di decrittografare il traffico inviato dal client.