Stiamo cercando di creare uno schema per proteggere la comunicazione http tra i nostri server interni.
Ci sono schemi validi già esistenti? I requisiti che abbiamo sono:
- I client e i server si trovano fisicamente in luoghi diversi e devono comunicare su Internet.
- Il client ha bisogno di garanzie che stia parlando al server con cui sta parlando.
- Il server ha bisogno di garanzie che stia parlando con il client con cui sta parlando.
- Il server deve essere in grado di bloccare la comunicazione con un particolare client nel caso in cui sia stato compromesso.
- Esiste una comunicazione sicura fuori banda che consente la distribuzione di cose come le chiavi.
La nostra idea attuale è di proteggere tutte le comunicazioni tramite SSL. Una catena di certificati per convalidare il certificato del server verrà distribuita ai client (e solo ai client) utilizzando la comunicazione sicura out-of-band. Ogni volta che il client comunica con il server, viene bloccato per l'utilizzo di questa catena di certificati. Questo garantisce che il client stia parlando con il server corretto e ci offre alcune garanzie sul lato server che sta parlando con uno di un gruppo di client semi-attendibili.
Una coppia di chiavi pubblica-privata viene generata per ciascun client. Le chiavi pubbliche sono memorizzate sul server (tramite la comunicazione sicura out-of-band). Il seguente flusso di lavoro viene utilizzato per autenticare il client.
Il token di sessione viene quindi inviato in tutte le richieste future. Il token di sessione può essere revocato ecc. Se un client è compromesso, è possibile rimuovere la chiave pubblica dal server e tutti i token di sessione associati a quel client revocati.
C'è un modo migliore per farlo? C'è qualcosa che non abbiamo considerato?