我刚刚创建了一个新的Rails项目,它附带了这个credentials.yml.enc
文件。
公开提交是否安全?
我终于明白了。 首先阅读此 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
时需要设置哪些值。
环境中的所有 Rails 实例production
都应具有相同的credentials.yml.enc
和master.key
。
所以你应该在你的源代码中保留credentials.yml.enc
。
David Heinemeier Hansson
在这里说的:
这些机密不应该承受测试或开发中的任何类型的攻击。
据我所知,你不应该在这里保留该死的秘密凭证,然后公开发布是件好事。
只有在生产环境(和衍生环境,如公开的测试版(中,秘密才真正需要保密。因此,我们可以简单地将此密钥插入到新的平面凭据.yml.enc文件中。
最后他提到:
注意:我们应该只保留 Rails.secrets 和朋友。Rails.credentials设置将是一种新的并发方法。所有新应用程序都会使用它,但我们不需要搞砸现有的应用程序。
希望它能有所帮助。有关更多信息,请遵循此内容。
credentials.yml.enc
为什么不呢?这是加密文件,没有密钥就没有任何信息。
但master.key
你必须保密!!它可能会解密您的文件。
您可以将credentials.yml.enc
文件推送到生产环境。只需删除master.key
即可。它们旨在被推向生产。但是,如果您对此持怀疑态度,请将其保存到某个本地服务器,并在部署时制作代码以拉取文件并master.key
。如果您愿意,可以使用 Capistrano 任务完成此操作。