L'utilizzo di una CA è più sicuro anche se firmo automaticamente?

11

Abbiamo un'applicazione web che eseguiamo per i clienti al loro stand nelle fiere. La comunicazione tra client e server è stata effettuata su HTTP fino a poco tempo fa.

Al momento stiamo lavorando per migliorare diversi aspetti relativi alla sicurezza di questa applicazione. Ad esempio, ora ho implementato il supporto per HTTPS e ho scritto un piccolo script per generare un certificato autofirmato per il server. I client dovrebbero aggiungere questo certificato agli archivi certificati attendibili in modo che il browser non si lamenti di ciò. Fin qui tutto bene.

Durante la chat qualcuno ha detto che non dovrei mai utilizzare un certificato autofirmato autonomo e che dovrei invece utilizzare un'autorità di certificazione per firmare il mio certificato, anche se la CA stessa è autofirmata.

Dato che dovrei ancora fidarmi manualmente della CA autofirmata sui client, non vedo come ciò possa trarre vantaggio da un punto di vista della sicurezza. Immagino che sarebbe leggermente più conveniente in alcuni casi, ma di solito cancelliamo i client e il server dopo ogni distribuzione e reimage la prossima volta che avremo bisogno di impostare il sistema.

    
posta Der Hochstapler 27.09.2013 - 22:10
fonte

1 risposta

11

La distinzione dipende da alcuni dettagli sul certificato autofirmato e su come reagiranno il browser e il sistema operativo.

Un certificato normale include un'estensione Basic Constraints che contiene una bandiera che indica se il certificato è per una CA o no; quando il flag è TRUE , il certificato è considerato accettabile come emittente per altri certificati. Se manca completamente l'estensione, il certificato deve essere considerato come non CA.

I certificati CA root sono "speciali"; non sono certificati veri. Sono trust anchors ; un TA è, nominalmente, una chiave pubblica accoppiata con un nome. È tradizionale codificare i trust ancore come certificati e, poiché un certificato include un campo per una firma, alcuni byte devono essere memorizzati lì; ancora una volta, la Tradizione dice che faremo il certificato autofirmato . Nessuno controlla davvero quella firma, però; i junk byte di circa la giusta dimensione servirebbero altrettanto bene.

Il punto delicato è quindi che l'interpretazione delle eventuali estensioni di certificato trovate in tale "certificato CA radice" non è standard. In particolare, alcuni CA storici risalgono a prima dell'invenzione dell'estensione Basic Constraints ; come veri certificati, sarebbero interpretati come "non CA", ma dal momento che sono ancore fidate camuffate da certificati, le normali regole di interpretazione non si applicano.

Quindi su alcuni browser o sistema operativo, un certificato non CA (privo di un'estensione Basic Constraints , o addirittura di uno con il flag cA impostato su FALSE ), una volta installato nell'archivio "root CA", può benissimo iniziare ad essere accettato come CA. Pertanto, la riservatezza della chiave privata per qualsiasi certificato installato nel trust store dell'utente è piuttosto critica.

Qual è la differenza nel tuo caso? Dopo tutto, nella tua situazione, ci sono due scelte:

  • Si crea un certificato autofirmato per il proprio server e l'utente installa tale certificato come "attendibile".
  • Si crea un certificato CA autofirmato, che l'utente installa come "affidabile". emetti un certificato normale per il tuo server con questa CA.

In entrambi i casi, l'utente cede la sua sicurezza ad un certificato da te, che l'utente installa come "fidato". Quindi cosa cambierebbe?

La differenza è che se si utilizza una CA personalizzata, è possibile memorizzare la chiave privata corrispondente con una buona protezione. Ad esempio, tu fai la CA business su un laptop che è tenuto offline in ogni momento. Non c'è possibilità di un exploit remoto quando non c'è nessuna rete. La CA principale deve essere sempre offline e utilizzata solo come parte delle procedure manuali e delle chiavi USB per il trasferimento dei dati. D'altra parte, il tuo server è, beh, un server, quindi è online e intrinsecamente esposto. Un utente malintenzionato che accede al tuo server può ottenere una copia della chiave privata del server. Se la chiave pubblica corrispondente è stata installata come "trusted root" nelle macchine degli utenti, anche l'hacker ottiene molto vantaggio su queste macchine.

In breve, la creazione di una CA personalizzata distinta dal certificato del server (utilizzato tutto il giorno) consente una migliore protezione della chiave privata e quindi un minore rischio di aumento di potenza da parte di un aggressore catastrofico.

Ci sono browser che non sono così vulnerabili . Quello che vuoi veramente, con un certificato server autofirmato, è che gli utenti si fidano del certificato solo per le connessioni SSL (non come CA), e solo per quello specifico server. Firefox sa come farlo; si chiama "eccezione di sicurezza" nella terminologia di Firefox (vedi Preferenze - > Avanzate - > Certificati - > Visualizza certificati, quindi la scheda "Server").

    
risposta data 27.09.2013 - 23:25
fonte

Leggi altre domande sui tag