Tengo una pregunta sobre las mejores prácticas para almacenar un archivo de almacén de claves ( .jks
) en el control de origen. Este Keystore es llamado por un componente Java independiente que recupera una clave privada con el propósito de firmar aserciones SAML.
Por razones de seguridad, me gustaría abstenerme de incluir este Almacén de claves en el mismo proyecto de git que nuestro código Java. Este código fuente se envía a muchas ubicaciones diferentes para las diversas herramientas utilizadas. (Herramientas de revisión de código, escáneres de código fuente) y no creo que nada bueno pueda venir de tener nuestro archivo de Almacén de claves en todas estas ubicaciones.
Eso me deja con la pregunta de, ¿cuál es el mejor lugar para incluir este archivo en el control de código fuente? He investigado un poco en Internet y todavía tengo que encontrar una buena respuesta, así que aquí están mis pensamientos.
Plan A
Planeo colocar el archivo de almacén de claves en un repositorio privado que está bloqueado. Esto solo puede ser accedido por una audiencia muy limitada. El almacén de claves se agregará al componente independiente en la compilación como una dependencia por el proceso de implementación.
- Pros
- El almacén de claves no se distribuiría con nuestro código fuente
- Las actualizaciones del Almacén de claves en el control de origen se podrían bloquear y supervisar cuidadosamente
- Contras
- Mayor complejidad para la gestión de certificados
- El almacén de claves se agregará al módulo en el proceso de implementación de todos modos, por lo que el beneficio de seguridad es limitado
Plan B
En lugar de mantener un almacén de claves estático, cada vez que se inicia el proceso de construcción, se crea un nuevo almacén de claves con una clave pseudoaleatoria. La clave se agrega como parte del código postal en nuestro proceso de compilación. Luego, los certificados deben agregarse al almacén de claves. La mayoría de las instancias de este módulo de Java tendrían certificados únicos, por lo que no mantener la referencia estática no presentaría una gran cantidad de trabajo ocupado.
- Pros
-
No hay almacén de claves estático para que los atacantes aprovechen
-
Cada instancia del almacén de claves tiene su propia contraseña
- Contras
-
Aumente la complejidad del proceso de construcción
-
Si se utiliza el mismo certificado en varias instancias de este módulo, el certificado deberá agregarse a cada uno.
¿Cuál es mi mejor opción? ¿También voy por el camino correcto con esto?