我什么时候可以将私钥提交到源代码管理?

信息安全 公钥基础设施 源代码
2021-08-18 03:49:12

也就是说,在什么情况下,将未加密的密钥对提交给像 SVN 或 Git 这样的内部源代码控制是有意义的?

讨论加密私钥的相关问题:将加密的私钥添加到源代码控制中是否是不好的做法?

4个回答

当私钥只不过是一个测试夹具,用于测试需要私钥的某些进程,并且私钥实际上并未用于保护任何系统。

某些情况下,提交加密密钥可能是合适的。例如,如果存储库是公共/开源的,但持续集成系统需要访问该文件 - Travis CI 支持这一点

否则你不应该提交私钥。

一般来说,在同一个存储库中混合代码和秘密配置(密码、密钥等)是一个坏主意,因为通常需要(或至少会从中受益)访问代码的人比需要访问任何给定秘密的人多得多。此外,VCS 系统的常见工作流程是创建大量副本。

这并不意味着您不能将秘密配置放在 VCS 中,但它应该是与您的代码分开的存储库,并且对它的访问应该受到非常严格的控制。

我想你需要问自己的是:

如果密钥被泄露,我可以检测到它吗?

撤销过程如何影响其他人?

例如:如果内部源代码控制回购是在公司范围之外获取的,例如通过开发人员的笔记本电脑怎么办?如果这台笔记本电脑被盗怎么办?如果是一个心怀不满的员工制作了一份副本并将其保存在他们的个人笔记本电脑上怎么办?

换句话说,密钥可以用来访问公共资源吗?如果可以,损害是什么?

如果您的开发实践需要共享私钥,那么根据定义,它不是私钥。您可能想考虑为什么会发生这种情况以及是否应该考虑按用户访问令牌(例如 oAuth、API 密钥)或其他解决方案。

由于尚未给出此答案,看来我需要:

从来没有。真的从来没有

正如已经指出的,根据定义,私钥应该保密。但是源代码控制是为了共享和提供信息(也许是针对有限的受众,但无论如何)。

您可能想要这样做的原因仅仅是因为您还没有完成您需要的流程。即使您可能打算将该密钥用于某些在每次测试运行后都会被擦除的测试系统,但您可能不会强制执行您的意图。意图会随着时间的推移而衰减,并且在某个时间点,密钥将用于生产。