Assumi il seguente scenario e, per favore, correggimi se sbaglio da qualche parte:
C'è un client e c'è un server SSH al quale il client si connette. C'è anche un man-in-the-middle (MIM) che è in grado di intercettare il traffico in entrata e in uscita del client.
Ora supponiamo che il client si connetta al server SSH per la prima volta e le informazioni sulla chiave pubblica del server non siano ancora nel file known_hosts. Il server invia la sua chiave pubblica al client, il client controlla il file known_hosts, non trova la chiave pubblica del server e quindi il server deve ora dimostrare la propria identità al client. L'identità è dimostrata con successo (usando la chiave privata del server), ma supponiamo che il client non memorizzi la chiave pubblica del server in known_hosts dopo (non è obbligatorio archiviarlo in known_hosts, per quanto ne so).
La prossima volta che il client si connette al server SSH, il man-in-the-middle (MIM) intercetta la richiesta di connessione del client e invia la propria chiave pubblica al client, per conto del vero server SSH. Il client riceve la chiave pubblica di MIM, ispeziona il file known_hosts e non trova la chiave pubblica ricevuta in quel file, quindi il "server" (MIM) deve dimostrare nuovamente la propria identità. Poiché la chiave pubblica del MIM è associata alla chiave privata corrispondente, MIM dimostra con successo la sua identità al client.
È possibile compromettere la sicurezza in questo modo? Correggimi se sbaglio da qualche parte per favore.
Qualcuno mi ha detto che il certificato del dominio del server è in grado di risolvere il problema, quindi in aggiunta vorrei capire lo scopo dei certificati host. Ho letto che il certificato è inserito nel file known_hosts proprio come la normale chiave pubblica. Ma che senso ha usare un certificato se possiamo usare la stessa chiave pubblica su tutti i server nel dominio e semplicemente mettere quella chiave pubblica nel file known_hosts del client? Apparentemente, se non ci sono ancora le chiavi pubbliche in known_hosts, l'attacco che ho descritto sopra è ancora possibile, e non importa se il server usa o meno il certificato.