我刚刚创建了一个新的 Rails 项目,它带有这个credentials.yml.enc
文件。
公开提交是否安全?
这里David Heinemeier Hansson
说了什么:
这些秘密不应该在测试或开发中承受任何形式的攻击。
据我所知,您不应该在这里保留该死的秘密凭据,然后公开发布是很好的。
只有在生产环境(和衍生环境,如公开的测试版)中,秘密实际上需要保密。所以我们可以简单地将这个秘密插入到新的平面 credentials.yml.enc 文件中。
最后他提到:
注意:我们应该只保留 Rails.secrets 和朋友。Rails.credentials 设置将是一种新的并发方法。所有新的应用程序都会使用它,但我们不需要搞砸现有的应用程序。
希望它会有所帮助。有关更多信息,请关注此。
credentials.yml.enc
为什么不?这是加密文件,没有密钥就没有任何信息。
但是master.key
一定要保密!!!它可能会解密您的文件。
我终于明白了。首先阅读此https://blog.saeloun.com/2019/10/10/rails-6-adds-support-for-multi-environment-credentials.html。
对于test
和development
env,你可以简单地删除master.key
,你会发现rails s
效果很好。您可以运行rails console
,然后运行Rails.application.credentials.config
以查看该值。
但是如果你有一个错误master.key
并运行rails s
,你会得到一个错误。
但是如果你删除了master.key
,你会发现它rails s -e production
不起作用。
如果你有正确的值master.key
,你可以运行EDITOR=vim rails credentials:edit
来编辑它。
如果你没有正确的值master.key
,当你运行时EDITOR=vim rails credentials:edit
,它会为你生成一个新的值master.key
,但不幸的是这master.key
是一个错误的值。这是合理的,因为credentials.yml.enc
除非您已经得到正确的master.key
.
因此,您可以删除credentials.yml.enc
andmaster.key
并运行EDITOR=vim rails credentials:edit
以生成新的对。但在你这样做之前,你应该删除master.key
并运行rails console
,然后运行Rails.application.credentials.config
以了解运行时需要设置的值EDITOR=vim rails credentials:edit
。
production
env 中的所有 Rails 实例都应该具有相同的credentials.yml.enc
和master.key
。
所以你应该保留credentials.yml.enc
你的源代码。
您可以将credentials.yml.enc
文件推送到生产环境。只需删除master.key
. 它们旨在被推向生产。但是,如果您对此持怀疑态度,请将其保存到某个本地服务器,当您部署 make 代码以提取文件和master.key
. 如果您愿意,可以使用 Capistrano 任务来完成。