2012-07-30 13 views
6

Non sono sicuro che sia stata posta una domanda simile (non sono riuscito a trovarla), ma è possibile proteggere Client/Server dall'attacco Man-In-The-Middle?È possibile prevenire attacchi man-in-the-middle quando si utilizzano certificati autofirmati?

Sto scrivendo un'applicazione client per comunicare con il server. La comunicazione sarà basata su SSLv3. Sono d'accordo con i certificati autofirmati del server, ma preoccupato che qualcun altro generi lo stesso certificato autofirmato nello stesso nome del server e finga di esserlo. L'applicazione del mio cliente utilizza la libreria OpenSSL. [Client e Server sono basati sulla parsimonia, se fa alcuna differenza]. Posso evitare tale attacco mantenendo allo stesso tempo il supporto per i certificati autofirmati?

+1

Se l'applicazione non deve essere compatibile con client/server esistenti, è possibile andare direttamente a TLS 1.x (il più alto supportato dalle librerie) e saltare SSL 3.0 se è possibile. – Bruno

+0

@Bruno Grazie. Non posso andare per TLS per ora. Il server utilizza SSLv3. –

risposta

12

Sì.

In breve, un certificato autofirmato è più insicuro di un certificato CA solo quando il client non conosce il certificato in anticipo e quindi non ha modo di convalidare che il server è chi dice di essere.

Se si aggiunge il certificato autofirmato al client e non si accetta alcun altro certificato, si è effettivamente sicuri (o, si potrebbe argomentare, anche più) di avere un certificato firmato dall'autorità di certificazione.

Le parti importanti per mantenere sicuro SSL con o senza un'autorità di certificazione sono;

  • La chiave privata del server (e nel caso di una CA, le chiavi private di tutte le sue radici) è tenuta segreta.
  • Il client conosce il certificato del server (o la sua radice CA).
+0

Sembra una possibile soluzione nel mio caso. Quindi, anche se 'man-in-the-middle' presenta lo stesso certificato (la chiave pubblica specifica) come quella del mio server 'reale', non può decodificare i dati dal client in quanto non avrà il 'vero' la chiave privata del server, giusto? –

+0

@TusharSudake Esattamente, il certificato non è utile a nessuno che non abbia la chiave privata per esso. –

+0

Grazie!Questo e 'esattamente quello che stavo cercando –

1

Se è possibile proteggere abbastanza bene le proprie chiavi private, un intermediario non sarà in grado di eseguire il masquerade come si desidera, presupponendo che l'utente guardi effettivamente il certificato. Il problema con l'autofirmato è che se vuoi che l'utente aggiunga l'eccezione al browser, o semplicemente ignori l'avviso, allora sei esposto all'attacco man-in-the-middle, perché chiunque altro può creare il proprio certificato.

Ovviamente, "proteggere le tue chiavi private abbastanza bene" non è affatto banale. Quando si paga un certificato "Verisign", non si paga per il proprio software che crea il certificato, si paga per le forze di sicurezza che proteggono l'edificio in cui sono memorizzate le chiavi private.

4

È possibile codificare in modo rigido il certificato del server e confrontarlo con ciò che si riceve.

O, meglio ancora, creare un certificato CA e un certificato server, firmato dalla CA. Fare in modo che la CA si fidi del client (sempre codificandolo nell'applicazione) e convalidi il certificato del server ricevuto utilizzando il certificato CA.

+0

(La configurazione manuale può anche funzionare, invece di una rigida codifica.) – Bruno

+0

@Bruno infatti. Ma questo rende la vita e il supporto degli utenti un po 'più complicati, quindi mi piace l'approccio CA auto-fatto. –

Problemi correlati