Ho una domanda sulla migliore pratica nell'archiviazione di un file di archivio di chiavi ( .jks
) nel controllo del codice sorgente. Questo keystore viene chiamato da un componente Java autonomo che recupera una chiave privata allo scopo di firmare asserzioni SAML.
Per motivi di sicurezza, vorrei astenermi dall'includere questo Keystore nello stesso progetto git del nostro codice Java. Questo codice sorgente è spinto in molte posizioni diverse per vari strumenti utilizzati. (Strumenti di revisione del codice, scanner del codice sorgente) e non credo che nulla di buono possa derivare dal fatto che il nostro archivio di keystore si trova in tutte queste posizioni.
Questo mi lascia con la domanda, dove è il posto migliore per includere questo file nel controllo del codice sorgente? Ho fatto un po 'di ricerche su internet per trovare una buona risposta, quindi ecco i miei pensieri.
Pianifica A
Ho intenzione di posizionare il file Keystore in un repository privato bloccato. Questo è accessibile solo a un pubblico molto limitato. Il keystore verrà aggiunto al componente autonomo su build come dipendenza dal processo di distribuzione.
- Professionisti
- Il keystore non verrebbe distribuito con il nostro codice sorgente
- Gli aggiornamenti al Keystore nel controllo del codice sorgente potrebbero essere bloccati e monitorati con attenzione
- Contro
- Maggiore complessità per la gestione della certificazione
- Il keystore verrà comunque aggiunto al modulo nel processo di distribuzione, quindi il vantaggio di sicurezza è limitato
Piano B
Invece di mantenere un keystore statico, ogni volta che viene avviato il processo di costruzione, viene creato un nuovo keystore con una chiave pseudo casuale. La chiave viene quindi aggiunta come parte del file zip nel nostro processo di compilazione. I certificati dovranno quindi essere aggiunti al keystore. La maggior parte delle istanze di questo modulo Java hanno certificati univoci, quindi non mantenere il riferimento statico non introdurrebbe una grande quantità di lavoro occupato.
- Professionisti
-
Nessun keystore statico per gli aggressori per trarre vantaggio da
-
Ogni istanza del keystore ha la propria password
- Contro
-
Aumenta la complessità del processo di creazione
-
Se lo stesso certificato viene utilizzato su più istanze di questo modulo, il certificato dovrà essere aggiunto a ciascuna di esse.
Qual è la mia opzione migliore? Anche io sto andando giù per la strada giusta con questo?