【发布时间】:2018-05-28 03:26:02
【问题描述】:
我刚刚创建了一个新的 Rails 项目,它附带了这个 credentials.yml.enc 文件。
公开提交是否安全?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5.2
我刚刚创建了一个新的 Rails 项目,它附带了这个 credentials.yml.enc 文件。
公开提交是否安全?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-5.2
David Heinemeier Hansson 说了什么here:
这些秘密不应该在测试或开发中承受任何形式的攻击。
据我所知,您不应该在这里保留该死的秘密凭据,然后公开发布是件好事。
只有在生产环境(和衍生环境,如公开的测试版)中,秘密实际上需要保密。所以我们可以简单地将这个秘密插入到新的平面 credentials.yml.enc 文件中。
最后他提到:
注意:我们应该只保留 Rails.secrets 和朋友。 Rails.credentials 设置将是一种新的并发方法。所有新应用都会使用它,但我们不需要破坏现有应用。
希望它会有所帮助。更多信息,请关注this。
【讨论】:
credentials.yml.enc 为什么不呢?这是加密文件,没有密钥就没有任何信息。
但是master.key你一定要保密!!!它可能会解密您的文件。
【讨论】:
我终于明白了。 请先阅读https://blog.saeloun.com/2019/10/10/rails-6-adds-support-for-multi-environment-credentials.html。
对于test 和development 环境,您可以简单地删除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 和 master.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 任务来完成。
【讨论】: