Ruby on rails rails 4中的密钥库有什么用途

Ruby on rails rails 4中的密钥库有什么用途,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-5,ruby-on-rails-6,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 5,Ruby On Rails 6,我是Rails 4的新手,不了解Rails 4中config/secrets.yml下的secret\u key\u base的用法。你能解释一下这个概念吗 此外,当我在生产环境中工作时,系统会提示我使用designe.rb、config.secret\u key和secret\u key\u base设置secret\u key。但是,我可以使用rakesecret命令生成一个新的秘密 开发环境和生产环境之间有什么区别 每次生成时,它与新生成的secret\u key\u base一起添加时,

我是Rails 4的新手,不了解Rails 4中
config/secrets.yml
下的
secret\u key\u base
的用法。你能解释一下这个概念吗

此外,当我在生产环境中工作时,系统会提示我使用
designe.rb
config.secret\u key
secret\u key\u base
设置
secret\u key
。但是,我可以使用
rakesecret
命令生成一个新的秘密

开发环境和生产环境之间有什么区别

每次生成时,它与新生成的
secret\u key\u base
一起添加时,它是如何匹配的


如何使用其他服务器保护应用程序?

机密令牌.rb文件的内容包括一个长的随机字符串,用于验证签名cookie的完整性(例如用户登录到您的web应用程序时的用户会话)

说:

使用
secret\u token.rb
初始值设定项中现有的secret\u key\u库 为任何用户设置SECRET\u KEY\u BASE环境变量 在生产模式下运行Rails应用程序。或者,您可以简单地将现有的secret\u key\u base从
secret\u token.rb
初始值设定项复制到production部分下的secrets.yml,替换

由于它是一个重要的文件,您不能将其放入.gitignore,因此使用env变量存储
secret\u key\u base
值被视为一种良好的做法:

创建
.env
.powenv
文件并将其存储为:

export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
然后在
config/initializers/secret\u token.rb

YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments
  ('a' * 30) # should be at least 30 chars long
else
  ENV['SECRET_TOKEN']
end
是(有点老)长,但真的有很多有用的信息的主题


更新04.05.15 从Rails 4.2开始,不再有
secret\u token.rb
文件。 根据新的约定,有一个
config/secrets.yml
文件用于存储应用程序的机密

关于如何根据创新将现有应用升级到4.2.x


从技术上讲,
secrect\u key\u base
的目的是作为应用程序的
key\u生成器
方法的秘密输入(选中
Rails.application.key\u生成器

Rails框架中的三个核心功能使用了应用程序的
密钥生成器
,以及相应的
密钥库

  • 为可通过访问的加密Cookie派生密钥
    cookies.加密的
  • 导出HMAC签名cookie的密钥,这些cookie是 可通过
    cookies访问。已签名
  • 为所有 应用程序的命名实例
请查看。

secret\u key\u base用于对会话进行加密和签名的三个密钥中的每一个密钥的详细信息 为了安全地在Cookie中来回发送会话
在轨道4中

  • 如果您的应用程序名为
    Hello
    ,并且
  • 您将
    会话['a']='b'
  • 您的cookie将如下所示:

    _Hello_session=BAh7B0kiD3%3D%3D--dc40a55cd52fe32bb3b84ae0608956dfb5824689
    
    也就是说:

    _Hello_session=<encrypted a=b>--<digital signature>
    
    \u你好\u会话=--
    
    Cookie由服务器设置并保存在客户端,每次我们请求页面时,浏览器都会向服务器重新发送设置Cookie

    为了防止邪恶的人理解
    a=b
    字符串,它是加密的
    为了防止坏人篡改cookies,使用了数字签名


    在这两种情况下,都使用了secret\u key\u base值(加密/解密a=b并验证数字签名)。

    1。据我所知,会话数据保存在服务器中,cookie中有一个会话id。例如,将用户id存储在会话中,浏览器可以看到唯一的会话id,而一旦登录,服务器就可以通过会话id知道哪个用户发送请求。这里您说会话['a']='b'将加密cookie中的数据。我不确定您是否混淆了会话和cookie。2.浏览器如何在不知道密钥库的情况下解密它并获取信息?对不起,现在我知道rails使用的是基于cookie的会话,这意味着会话信息存储在cookie中。是的,这是正确的,基于cookie的会话为分布式应用服务器和speedNote中的会话提供了可移植性。如果您在部署时使用Ansible或类似的工具,您可以在生产部署期间替换整个secret.yml,如果您愿意,还可以替换gitignore
    config/secret.yml。实际上,config/secrets.yml是从Rails 4.1开始引入的,这意味着当您更改
    secret\u key\u base
    时,您的用户将被注销。至少。对于使用RubyonRails 5.2或更新版本的读者
    secret\u key\u base
    仍在使用,但存储在
    config/credentials.yml.enc
    中。这个文件是加密的。您可以找到有关新凭证系统的更多信息,或运行
    rails-credentials:help