Autenticazione del certificato client abbastanza più server-back-end e più client-server

3

Ho un numero flessibile di server A (stesso tipo di server ma situati in regioni diverse, quindi in grado di servire dati diversi) che devono autenticare le chiamate api da un numero flessibile di server B (stesso tipo di server ma situati in regioni diverse ).

Qualsiasi server B può chiamare qualsiasi server A. E, naturalmente, un server A in una posizione è in realtà un carico bilanciato di più server.

Quindi ho bisogno che tutte le chiamate dai server B vengano autenticate quando si chiama qualsiasi server A e invece di fare qualcosa di equivalente a ciò che si farebbe con token / sessioni / ..., ho ristretto l'autenticazione al certificato del client.

Tuttavia, per evitare l'incubo di un deployo, quale sarebbe la migliore strategia? - Un unico certificato client utilizzato da tutti i server B (più semplice?) - Un certificato client univoco utilizzato da tutti i server B per ciascun server A? - Un certificato client univoco utilizzato per tutti i server A, ma diverso per server B? - Una moltiplicazione cartesiana del server di certificati unico B per ciascun server A?

Per dare una scala, ci possono essere > = 10 server A e > = 30 server B.

Grazie!

    
posta ptou 02.10.2017 - 20:16
fonte

1 risposta

2

C'è più di un modo per farlo, ma se fossi io a farlo, questo è il mio modo di scegliere:

Gruppo di server A

Questi server dovrebbero avere un certificato server , non uno client. Dal momento che saranno tutti accessibili utilizzando lo stesso hostname, dovrebbero utilizzare lo stesso certificato server. Questo certificato deve essere emesso da un'autorità di certificazione attendibile dai server del gruppo di servizi B, che può essere una CA generalmente attendibile, come ad esempio letsencrypt.org o Digicert, oppure può essere una CA locale che è stata configurata (nel qual caso è necessario distribuire il certificato CA radice ai server B).

Gruppo di servizi B

Questi server dovrebbero utilizzare i certificati client . Qui, userei un certificato per server, invece di averne tutti uno in condivisione. E userei un CA locale, interno solo alla mia organizzazione, per emetterli. Avrei configurato i server A per consentire l'accesso a qualsiasi client che utilizza un certificato emesso dalla mia CA interna.

Il motivo per cui non utilizzi una CA pubblica è che è molto più semplice concedere l'accesso ai tutti certificati emessi da una CA, invece di verificare se il certificato contiene per es. l'organizzazione corretta o il nome host corretto. (Ovviamente si desidera anche controllare che il certificato non sia stato revocato, quindi la CA ha bisogno di pubblicare gli elenchi di revoca dei certificati, o forse persino consentire i controlli OCSP.)

Raccomando anche l'uso di un sistema di gestione della configurazione, come puppet o ansible, per registrare automaticamente i server B sulla CA interna al momento dell'installazione e per rinnovare i certificati, se necessario. Esistono numerosi protocolli che possono essere utilizzati per questo; Consiglierei CMP o EST. (EST è più recente, è specificato in RFC 7030 e puoi testarlo su link ).

Impostazione di una CA interna

Se la CA interna viene utilizzata solo per creare questi certificati client, puoi utilizzare praticamente tutti i software CA che ti piacciono e sei sicuro di poterlo gestire.

  • OpenSSL è disponibile per tutti i sistemi operativi, ma non è molto facile da usare, anche se con alcuni script è molto versatile.
  • Se dovessi configurarlo, utilizzerei EJBCA , perché è il software che conosco meglio e è abbastanza facile da usare. È open source e puoi scaricare una macchina virtuale preinstallata per provarla. (Si noti che questa macchina preinstallata non dovrebbe essere utilizzata in produzione senza un lavoro significativo svolto prima, non è stata temprata e ogni macchina virtuale ha la stessa chiave di amministrazione!)
  • Se utilizzi Windows, Servizi certificati Microsoft Active Directory è probabilmente la soluzione migliore; è integrato sin dall'inizio.
  • Se stai eseguendo RedHat, forse guarda RedHat Certificate System .
risposta data 05.10.2017 - 10:42
fonte

Leggi altre domande sui tag