我不应该把密钥库存储在版本控制中吗?

43

我正在使用一个密钥库 (.jks) 来存储我用来签署Android应用的证书。Android文档和社区已经让我明白< strong >决不能丢失此文件的重要性,但我没有找到任何关于应该将其放在何处的指导。

把它存储在Git中是一个可怕的想法吗(也就是说,这样做是否会有安全后果)?

假设密钥库本身和其中的私钥都有强密码。


34
作为一个只针对软件开发人员的具体问题,而且可能会产生严重后果,这似乎完全是论题的范围。 - Chris Stratton
3
显然,我对密钥库及其用途并不是完全熟悉,但我的唯一接触经验是编程方面的(如果想制作Android应用程序,则使用它们是必需的)。除非它们还有其他用途,否则我认为它们属于“主要用于编程的工具”类别。 - ZoFreX
2个回答

19

任何拥有读取权限的人都能够获取到你的Git仓库中的私钥。这被认为是一种安全问题,因此不建议这样做。如果你的GIT仓库完全私密,也就是说只有你可以访问它(不是在i.e. GitHub上的私人仓库,而是本地磁盘或你完全控制的基础设施中的git仓库),那么将您的私钥放在那里与您本地基础设施的安全程度一样安全。

假设密钥库本身和其中的私钥都有强密码保护

请注意,在您的(“公共”)私钥出现任何问题(被猜测、被窃取、被破解)的情况下,密码是您最后的防线。如果你的私钥被泄露了,就结束了。

另外,我非常确定并不是所有的开发人员都需要访问发布密钥,如果你需要他们访问,请使用其他渠道(如GPG加密电子邮件等)交付。但我建议首先重新考虑您的安全策略。


1
我很愚蠢地没有指定私钥仍然需要密码,我已经编辑了问题以反映这一点 :) - ZoFreX
4
为什么要依赖密码来保护密钥?密码本身可能比密钥更容易被猜测。而且,任何能够访问您代码库并拥有您签名二进制文件的人都可以在他们购买的AWS实例上进行无限次尝试去猜测它。即使您的代码库今天是私有的,但未来您可能会分享或将其存储在外部设备上,并忘记这种风险。 - Chris Stratton
1
祝你好运,在有限的时间内从已注册的pkey中重新创建。 - Marcin Orlowski
1
这正是我的观点...密码可以任意大,所以祝你暴力破解好运! - ZoFreX
1
存储在.jks文件中的密钥通常为2048位。密码可能要弱得多,可以很容易地被暴力破解。您绝对正确,密码也可以是2048位长,但我非常确定您无法记住如此长的密码,您需要将其存储在某个文件中,回到原点... - Yoni Gross
显示剩余2条评论

9
要更新您的应用程序,您需要两件事情:
  • 访问拥有该应用程序的Google Play开发者控制台。
  • 一个使用正确密钥库签名的APK。
通过将证书放入存储库并与您的开发人员共享,您正在放弃一个安全令牌。
如果您的Google Play Dev Console帐户安全,则应该没问题。但这取决于您的情况。
将其放入存储库要容易得多:
  • 您的存储库在许多位置克隆,并且通常有适当的备份。
  • 您的开发团队可以使用gradle自动为您的生产发布进行签名。
许多人更喜欢将其放在一张或多张SD卡上并将其放在某个地方。但是大多数人在办公室里没有称为“某个地方”的地方。几年后还能读取吗?
另外考虑两点:
  1. 如果您公司的Android应用程序的产品所有者更改,则永远不知道旧所有者是否仍具有副本,也没有人知道谁已经访问了它。您不能更改密钥。因此,如果密钥从一个人传递到另一个人,则必须认为它是不安全的。
  2. 当然,您可以将其完全保密。它受到您的密码的保护,而没有人知道。但是如果你死了怎么办?有人可能想要更新您的应用程序。这是不可能的。保持私有的私钥在您死后就丢失了。
因此,我认为将其放入存储库中就可以了。请注意确保您的Google帐户安全。对于此帐户,可以更改密码,激活两个因素等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接