Come posso spiegare i certificati autofirmati agli utenti?

6

Non mi fido delle autorità di certificazione, quindi sto usando un certificato autofirmato sul mio server. Il server fornisce sia un sito web che altri servizi.

La maggior parte dei moderni software con funzionalità SSL, quando si incontra SSL, controlla se il certificato è fornito da una CA e se non genera un avviso molto spaventoso . Contrariamente a La logica di Mozilla , credo che nel mio caso un certificato autofirmato è in realtà più sicuro , perché evita il rischio di CA dannose o incompetenti .

Ma diciamo che voglio dare ad un amico l'accesso al mio sito web o al mio server. Forse ho alcune foto su di esso del mio viaggio che voglio mostrarle: se gli fornisco l'URI sicuro, anche il loro computer farà apparire i soliti avvertimenti. Ma visto che a differenza di me, non erano quelli che hanno configurato tutto, in che modo loro sanno che Everything Is Fine ™ (a meno che l'impronta digitale non corrisponda)?

Potrei avere un piccolo avviso nella versione HTTP della mia pagina che spiega l'errore, e come verificare manualmente l'impronta digitale e assicurarmi che Tutto sia corretto . Ma:

  • Se la connessione è stata compromessa, l'autore dell'attacco potrebbe semplicemente modificare questo avviso per dire "i certificati autenticati di nah bro sono assolutamente soddisfacenti, fidati"
  • Se l'utente passa direttamente all'URI HTTPS, come farà a sapere di controllare la versione HTTP?
  • Se l'utente utilizza un servizio non Web a cui si accede tramite il proprio programma, come farà a sapere l'avviso?
  • Se l'utente non sa come funziona SSL, crederà al proprio browser e chiuderà il sito, invece di indagare su perché c'è un certificato autofirmato (poiché sfortunatamente la documentazione / L'atteggiamento degli autori UI sembra essere stato "non c'è mai una buona ragione").

Quindi, come posso assicurarmi che quando invii un utente al mio server e questi si trovino di fronte all'avviso "certificato autofirmato", sono in grado di decidere autonomamente se fidarsi o meno, invece di dover credi all'immagine distorta che il loro software dipinge per loro?

Non voglio dire agli utenti di "ignorare semplicemente l'avviso, va bene", perché non solo questo rinforza una cattiva abitudine in generale (e se la banca verificata dalla CA viene compromessa un giorno e presenta un firmato cert?) ma anche loro non avrebbero modo di sapere se il mio server è compromesso.

Vale anche la pena ricordare che i certificati non sono per sempre, e alla fine scadono, quindi l'utente deve essere in grado di distinguere tra un cambiamento sospetto di certificato (diciamo ben prima della scadenza pianificata di quello attuale), un cambiamento sospetto di certificato che è fatto per sembrare non sospetto (un MITM eseguito proprio quando avevo programmato di rinnovare la mia cert), un legittimo cambio di certificato (quando il mio certificato scade e ne emetto uno nuovo), e un cambiamento legittimo che sembra sospetto (I ha deciso di rilasciare un nuovo certificato prima del previsto per qualsiasi motivo).

Possiamo supporre che:

  • Ho pochi utenti, quindi la scalabilità non è così importante. Ad esempio, gli utenti che mi inviano email o chiamano il mio numero di telefono per verificare il certificato sono soluzioni perfettamente valide.
  • Gli utenti si fidano di me e possono comunicare con me attraverso un canale sicuro. Ad esempio, possono parlarmi di persona o inviarmi messaggi di posta elettronica crittografati.
  • Gli utenti sono ragionevolmente intelligenti e ci si può aspettare che comprendano concetti di sicurezza di base come "se il certificato cambia in modo imprevisto, il sito potrebbe essere stato compromesso".

La mia preoccupazione principale riguarda gli utenti meno tecnici, che verrebbero confusi quando vedranno l'avviso del certificato autofirmato.

    
posta Superbest 21.04.2015 - 10:37
fonte

4 risposte

5

So how can I ensure that when I send a user to my server, and they are confronted with the "self-signed certificate" warning, they are able to decide for themselves whether to trust it or not, instead of having to believe the skewed picture that their software paints for them?

Se non utilizzi ancoraggi di trust predefiniti (ad esempio la CA radice del browser) devi trovare un modo per fornire ai tuoi utenti le informazioni sulla fiducia necessarie in modo sicuro . Il modo preferito sarebbe naturalmente personale, perché ogni modo indiretto come la telefonata o le mail firmate da PGP hanno bisogno di un trust prestabilito, ad es. associare numeri di telefono o chiavi con te.

Also worth mentioning is that the certificates are not forever, and eventually expire, so the user must be able to tell the difference between suspicious change of cert...

In questo caso devi informare nuovamente l'utente in merito al cambiamento in modo sicuro.

L'intera idea della CA attendibile nel browser è iniziare con un trust predefinito e rinviare le informazioni sulla fiducia di altri siti. Questo è simile alla vita reale: inizialmente ti fidi di alcune persone (i genitori ...) e da loro per imparare ad avere fiducia nelle altre persone. Ma una volta che abbandoni le impostazioni di fiducia iniziali, devi iniziare da zero e trovare così il tuo modo per far credere agli utenti.

Se vuoi stabilire il tuo certificato come fidato puoi iniziare solo con le relazioni di fiducia esistenti, cioè amici che ti conoscono direttamente, conoscere il tuo numero di telefono, la tua chiave PGP ecc. Queste relazioni di trust devono quindi essere utilizzate per trasportare il nuova fiducia nel tuo certificato (es. impronta digitale o simile). L'approccio migliore dipende quindi dal tipo di relazioni di fiducia che hai già con i tuoi amici e da quale può essere utilizzato come miglior trasporto per il nuovo trust.

    
risposta data 21.04.2015 - 11:01
fonte
3

Modifica : l'autore della domanda ha apportato modifiche significative alla sua domanda dopo che questa risposta è stata pubblicata. Questa risposta è basata su una versione precedente della domanda che dava l'impressione che stessero chiedendo di un normale sito web pubblico.

Non puoi spiegare che un certificato autofirmato va bene, perché su un sito pubblico non lo è! L'altra domanda che hai menzionato riguardava un contesto diverso: utilizzare la propria CA per firmare i certificati e disporre di un numero limitato e noto di client che si fidano della CA personalizzata. Dal punto di vista del browser, ciò non è tecnicamente diverso dall'utilizzo di una CA "ufficiale" e richiede che i client ottengano il certificato radice CA tramite un canale attendibile. Ma con utenti Internet anonimi, questo non è possibile.

Indipendentemente da quanto tu non abbia fiducia nel sistema CA (e hai buone ragioni per farlo, ma questo è un argomento diverso), usare un certificato autofirmato su un sito web pubblico è anche peggio. Qualsiasi utente malintenzionato MITM potrebbe decodificare la comunicazione, sostituire il proprio certificato con il proprio e ricodificarlo per l'utente. Senza una terza parte affidabile per verificare la firma del certificato, non vi è alcuna difesa contro questo. Quindi non c'è modo di verificare che effettivamente "tutto va bene".

Fornire l'impronta digitale del certificato è inutile, perché non si ha modo di inviarlo all'utente in un modo che non può essere manipolato dall'attaccante MITM. Un sito Web https può essere manipolato come descritto in precedenza e un sito Web http è ancora più facile da manipolare. L'autore dell'attacco potrebbe semplicemente sostituire l'impronta digitale sul sito web con quella del proprio.

C'è la speranza che un giorno un sistema migliore come DANE (che sposta il ruolo di trust nel sistema DNS) finalmente sostituire il sistema CA difettoso, ma fino ad allora le autorità di certificazione sono ancora la soluzione migliore che abbiamo.

    
risposta data 21.04.2015 - 17:05
fonte
1

Quando hai un contatto sicuro (!) con tutti i tuoi utenti su un supporto diverso, puoi inviare loro il certificato radice della tua autorità di certificazione che hai usato per firmare il certificato del tuo sito web e dare loro istruzioni su come aggiungere alla lista dei certificati di fiducia del proprio browser web (o magari anche di un comodo script di installazione che lo fa automaticamente).

Se eseguito correttamente, il sito Web non verrà più auto-firmato nel browser. Il browser lo tratterà invece come se fosse stato firmato da qualsiasi altra autorità di certificazione "reale".

Questo, naturalmente, non protegge i tuoi utenti da una CA canaglia che crea un certificato falso per il tuo sito web, perché i browser Web di solito non supportano il blocco di CA (dicendo loro di fidarsi solo di una CA specifica per un sito Web specifico) .

Dovresti anche rendere consapevoli i tuoi utenti che questo significa che ora puoi anche impersonare altri siti web visitati, quindi richiede una grande quantità di fiducia. Anche questo problema non è risolvibile, perché attualmente non esiste un concetto come una CA che è affidabile solo per domini specifici.

Per fortuna, questo problema potrebbe un giorno essere risolto con DANE che mette i server DNS nel ruolo delle autorità di certificazione . Sarai quindi in grado di distribuire il certificato TLS dei tuoi domini dal server DNS responsabile del tuo dominio (e solo di quello). Ma al momento non ci sono browser che lo supportano immediatamente, e considerando che ci sono diverse società che hanno interessi finanziari nel mantenere il sistema CA (che è praticamente una licenza di stampa di denaro venduta dagli sviluppatori di browser) potrebbe richiedere un finché non decolla.

    
risposta data 21.04.2015 - 17:39
fonte
-3

L'approccio Best (per il caso d'uso di un gruppo di utenti limitato e un sito web personale) che uso è di avere una pagina non protetta da qualche parte dove i miei utenti possono scaricare il certificato di root (la mia CA) e trovare le istruzioni su come installare quello là dentro fiducia negozio. in questo modo il computer può fidarsi del mio certificato "autofirmato".

uno dei mal di testa con questo approccio è che per Windows o Mac di solito è sufficiente inserirlo nell'applicazione di memorizzazione dei sistemi. su Linux / UNIX la maggior parte delle applicazioni ha un proprio archivio di certificati. E a volte i browser hanno il proprio negozio. Solitamente risolvo questo problema offrendo ai miei utenti (remoti) assistenza nell'installazione dei certificati e nella collocazione in tutti i posti giusti.

ma con un gruppo di utenti di meno di 100 persone ciò è fattibile.

per la tua osservazione "più sicura". È impossibile dire che è più sicuro. Quelle altre CA hanno audit regolari. Dubito che tu abbia il tempo / denaro per essere controllato come un CA. quindi semplicemente non sappiamo se sei più sicuro.

    
risposta data 21.04.2015 - 10:44
fonte

Leggi altre domande sui tag