【问题标题】:Why is secret_key_base blank on Heroku (Rails 5.2)为什么 Heroku 上的 secret_key_base 为空白(Rails 5.2)
【发布时间】:2019-07-17 19:10:29
【问题描述】:

我删除了secrets.yml 并创建了credentials.yml.enc

我在本地使用master.key,而在生产中我没有任何主密钥,只有一个RAILS_MASTER_KEY 设置为环境变量。

在 Heroku 上,如果我运行 Rails.application.secrets 我会得到:

{:secret_key_base=>nil, :secret_token=>nil}

如果我运行Rails.application.credentials,我确实会看到我的secret_key_base

但是,在本地...如果我运行相同的命令,我在调用 Rails.application.secrets 时看到 secret_key_base

我主要担心的是,rails 在生产中会有一个空的secret_key_base,它将用于加密会话和各种至关重要的安全事情。我正在尝试验证它是否确实具有密钥集。

我希望有一种方法可以 100% 确认它正在生产中工作,并且它不是空白的。有什么方法我可以调用来检查哪些不依赖于通过上述方法调用它?

【问题讨论】:

    标签: ruby-on-rails heroku ruby-on-rails-5


    【解决方案1】:

    SECRET_KEY_BASE 作为环境变量存储在 Heroku 上。您可以通过转到该测功机的设置在界面中查看这些内容,也可以在终端中进行:

    heroku run bash

    然后

    env | grep SECRET_KEY_BASE

    如果你没有看到它可能有问题,但你可以为 Heroku 生成一个新的并在环境变量中设置它(见Rails.application.key_generator

    【讨论】:

    • 嗯,是的,我确实在那里看到了。所以你说的是当rails启动时,它会从credentials.yml.enc文件中设置ENV?那么......当它去加密一个cookie或者它使用ENV变量来读取的东西时?
    • 用于加密凭证的密钥与密钥库不同。 master.key 上的密钥用于加密和解密所有凭据。它不会取代密钥库。因此,应该始终在环境中(至少在服务器上)找到密钥库。因此,直接回答您的问题 - secret_key_base 始终在环境中存储和引用。
    • 抱歉我的问题不清楚..我的意思是......当Rails rails启动时,它基本上解密credentials.yml.enc(使用主密钥ENV或文件)然后创建一个新的 secret_key_base 环境变量......然后,当需要加密 cookie 或会话时,它会读取 ENV 变量。那是对的吗?最终我关心的是我想要保证rails正确加载我的secret_key_base,并且secret_key_base出现在3个不同的位置并不清楚......(env,application.secrets和application.creds)。
    • 我有一个处理财务和关键数据的重要信息,所以我试图 100% 确保它在生产中正确设置 secret_key_base。我在 ENV 中看到它,在 application.credentials 中看到它,但在 application.secrets 中没有看到它。所以,为了理智,我想知道一种方法,这样我就可以检查 rails 是否正确地看到了该密钥(理想情况下,使用与加密 cookie 或类似内容的函数相同的策略,这样我知道函数实际上正在工作)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2020-06-27
    • 2017-01-16
    相关资源
    最近更新 更多