Ruby on rails rails 4中的密钥库有什么用途
我是Rails 4的新手,不了解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一起添加时,
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访问。已签名
- 为所有 应用程序的命名实例
在轨道4中
Hello
,并且会话['a']='b'
_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
。