[Questa è una riscrittura della domanda relativa all'aggiornamento. Vedi l'originale nella cronologia delle revisioni ]
L'autenticazione client TLS è qualcosa che quasi richiede sempre di estendere il motore TLS scrivendo il proprio codice di convalida personalizzato cert sul server-end. Sembra che tu abbia evitato questo problema con il porcellino salvadanaio sull'archivio di fiducia senza alcun codice di convalida aggiuntivo.
La domanda chiave è:
When your servers are verifying the client certificate, how do they know that it's a cert issued by you, and not a cert issued by a bad-guy?.
Dici:
We are importing the relevant Client certificates into the Server trust store / whitelist.
Questo potrebbe essere ok in termini di sicurezza. La prima domanda da porsi è che altro si trova nel trust store del server e se accetta le connessioni da certificati diversi da quelli autorizzati in whitelist. Stiamo parlando dell'archivio di fiducia del sistema operativo che contiene tutte le autorità di certificazione radice pubblicamente affidabili, oppure si tratta di un java trust store personalizzato vuoto prima di inserire la whitelist? Ad esempio, se la CA pubblica Let's Encrypt è nel trust store, allora chiunque abbia un cript Let's Encrypt potrebbe riuscire a ottenere una connessione al proprio server.
Fondamentalmente, vuoi convincerti che i certificati autofirmati che hai creato sono i solo certificati che saranno in grado di stabilire una connessione al server. Ho visto prodotti che funzionano in questo modo, quindi non è del tutto inverosimile, e una sicurezza adeguata è possibile, tuttavia ci sono alcune altre cose a cui pensare. Parliamo prima del solito modo in cui questo è impostato, quindi confronterò.
Di solito , il modo in cui client-auth funziona in una situazione come questa è in due modi:
CA privata
Hai una CA privata che controlli. Emette solo certificati per i client TLS validi. Pertanto il server TLS può semplicemente verificare che il client presenti un certificato rilasciato da questa CA e tu sai che è autentico.
CA pubblica
I tuoi clienti ottengono certificati da una CA di fiducia pubblica come Let's Encrypt. All'improvviso, solo verificare che il cert sia stato rilasciato da Let's Encrypt non è abbastanza buono perché metà di Internet ha un cert come quello, quindi questo non prova nulla. Qui, vuoi che il tuo "server TLS" mantenga una whitelist dei nomi di dominio dei "client TLS". Quando si convalida un certificato cliente, oltre a tutti i consueti controlli di validità, il DN nel certificato deve corrispondere a un nome di dominio nella sua lista bianca.
Confronto tra whitelist cert e whitelist CA
-
Revoca : normalmente, come parte della convalida di un certificato, un motore TLS può essere configurato per verificare con la CA per garantire che un certificato non venga revocato. Se uno dei server client è compromesso, è possibile revocare facilmente il certificato presso la CA e tutte le connessioni successive da tale certificato verranno rifiutate. In un modello di whitelist cert, puoi ancora farlo rimuovendo il cert dal truststore. Un po 'più manuale, ma ugualmente possibile. Poiché questo non è standard, assicurati di avere una procedura documentata per farlo.
-
Manuale e soggetto a errori : con un'impostazione della CA, devi solo importare il certificato CA una volta nell'endpoint TLS, quindi puoi emettere / revocare tutti i certificati desiderati e gli endpoint TLS verranno immediatamente iniziare ad accettarli / rifiutarli in modo appropriato senza ulteriori configurazioni. Con la configurazione, sarà necessario modificare manualmente l'archivio sicuro del server TLS ogni volta che si desidera alzarsi o rimuovere le autorizzazioni da un computer client TLS. Evitare l'installazione della CA può sembrare meno lavoro ora, ma pensare al lavoro extra a lungo termine, e il rischio aggiunto di un amministratore di sistema di non capire veramente come funzioni questa cosa non standard e aprire la sicurezza - per esempio aggiungendo una CA pubblicamente attendibile al trust store del server senza rendersene conto. Di nuovo, possibile, ma assicurati di documentare le procedure con molta attenzione.
Sommario
L'obiettivo di sicurezza che vuoi è che i tuoi TLS Client (e solo i tuoi client TLS) possano stabilire connessioni ai tuoi server TLS. Puoi certamente farlo con il sistema che hai descritto. La configurazione iniziale sarà più semplice, ma prevedo che a lungo termine la complessità operativa aggiuntiva tornerà a morderti, sia in termini di tempo e sforzi aggiuntivi, sia quando non ha bisogno di essere modificata in così tanto tempo che nessuno ricorda come funziona. Assicurati di preparare la approfondita documentazione su come funziona!