提问者:小点点

Java应用程序依赖于私钥,它们可以存储在GitHub中吗


我们的Java应用程序是一个用私钥SFTP文件到远程位置的作业。对于非PROD测试,有一个较低环境的私钥,PROD有自己的上层环境私钥。

如果我们在项目中没有将任何私钥签入GitHub,那么新开发人员将立即在构建/运行应用程序时失败。作业及其单元测试都要求用户机器上的某个地方存在私钥。唯一的解决方案是为新开发人员提供README.MD警告:“获取私钥,将其放在您机器的某个地方,并将application. yaml中的变量SFTP_PRIVATE_KEY设置为该位置——在您执行任何操作之前!”

如果我们确实在GitHub中签入了非PROD私钥,并且签入的application. yaml指向了该密钥,那么一切都将从头开始为新开发人员工作。但是我们听说从来不允许在GitHub中签入任何密钥。

是否至少允许将非PROD私钥签入GitHub,以简化初始设置,或者这从来都不是一个好主意?

SFTP使用私钥的应用程序代码,例如:

byteArrayInputStreamJSON = new ByteArrayInputStream(bytesJSON);         
jSch.addIdentity(filePrivateKey.getAbsolutePath(), sftpPrivateKeyPassphrase);
channelSftp.put(byteArrayInputStreamJSON, filename);

共1个答案

匿名用户

我想你真的误解了私钥是什么:私钥。它永远不应该离开源主机。然而,你想提交并将其推送到github?

我明白你想做什么,但从概念上讲,你的做法是错误的。

如果你想继续使用ssh私钥,那么新开发人员需要生成一个新的密钥对,然后将他们的公钥添加到. ssh/authorized_keys-你可以使用以前的密钥来做到这一点

另一种方法是,如果你真的坚持共享帐户和密钥,那么与其将其签入github,不如在新的开发笔记本电脑上配置私钥。或者将密钥放在需要身份验证的共享内部驱动器/挂载上。然后更新您的流程以使用该特定密钥:scp-i /path/to/mykeyuser@host对于这些情况中的任何一种

最后,您可以使用带有密码加密的密钥。此时,您可以与开发人员共享密码,并且可以将私钥放在任何您想要的地方(尽管安全专家会畏缩)。共享密码应该在带外。

如果你正在寻找一个零努力的解决方案,没有,这是设计好的。私钥对用户来说是私有的,也是单独的。如果你共享一个密钥,就像共享一个密码。你会在github中检查密码吗?很多人会,但是当他们有安全漏洞时,没有人应该哭泣。