我有一个关于.jks
在源代码管理中存储密钥库文件 ( ) 的最佳做法的问题。此 Keystore 由独立 Java 组件调用,该组件检索私钥以签署 SAML 断言。
出于安全目的,我想避免将此密钥库包含在与我们的 Java 代码相同的 git 项目中。此源代码被推送到许多不同的位置以供使用的各种工具。(代码审查工具、源代码扫描器)而且我认为将我们的 Keystore 文件放在所有这些位置不会有什么好处。
这给我留下了一个问题,将这个文件包含在源代码控制中的最佳位置在哪里?我已经在互联网上进行了一些挖掘,但尚未找到一个好的答案,所以这是我的想法。
A计划
我计划将 Keystore 文件放在一个被锁定的私人仓库中。这只能由非常有限的观众访问。密钥库将作为部署过程的依赖项添加到构建时的独立组件中。
- 优点
- Keystore 不会与我们的源代码一起分发
- 可以锁定并仔细监控源代码控制中密钥库的更新
- 缺点
- 证书管理的复杂性增加
- 无论如何,密钥库都会在部署过程中添加到模块中,因此安全优势是有限的
B计划
每次启动构建过程时,都会使用伪随机密钥构建一个新的密钥库,而不是保留静态密钥库。然后将密钥作为 zip 的一部分添加到我们的构建过程中。然后需要将证书添加到密钥库中。这个 Java 模块的大多数实例都有唯一的证书,所以不保留静态引用不会引入大量的繁忙工作。
- 优点
没有可供攻击者利用的静态密钥库
密钥库的每个实例都有自己的密码
- 缺点
增加构建过程的复杂性
如果在此模块的多个实例中使用相同的证书,则必须将证书添加到每个实例中。
哪个是我更好的选择?我也走在正确的道路上吗?