rails支持多环境密钥管理,也就是生产环境和开发环境的密钥可以分开,提高安全性
密钥有什么用呢?
比如JWT加密解密,sessionID加密解密,这些都需要key(对称加密)
开发环境
master.key 和encrypted(credentials.yml.enc)是两个文件
master.key
+ keys
=> encrypted
(encrypted是加密后的文本)
encrypted
+ master.key
=> keys
master.key
,credentials.yml.enc
我们可以输入命令行
bin/rails credentials:edit
上面这个命令默认是用vim编辑器打开,如果想用vscode打开,可以执行下面这个命令
EDITOR="code --wait" bin/rails credentials:edit
指定用什么编辑器打开,可以编辑EDITOR="*******"
例如指定vim编辑器打开
EDITOR="vim" bin/rails credentials:edit
系统会创建一个临时文件(如下图)编写key,关闭之后会自动删除这个临时文件
图中的secret_key_base 字段不是固定的
然后会自动通过这个key和master.key生成 credentials.yml.enc(如果不是创建新的
.enc文件会自动更新)
怎么查看临时文件里面的信息呢? rails自带的命令行可以查看
bin/rails console 或者 bin/rails c
然后输入
查看指定的key
Rails.application.credentials.secret_key_base
查看所有
Rails.application.credentials.config
生产环境
跟开发环境差不多,两个操作,写key 和 读key
写key 比开发环境多了--environment production
EDITOR="code --wait" rails credentials:edit --environment production
得到两个文件
config/credentials/production.key (被加入 .gitignore)
config/credentials/production.yml.enc
读key 比开发环境多了RAILS_ENV=production
RAILS_ENV=production rails c
查看指定的key
Rails.application.credentials.secret_key_base
查看所有
Rails.application.credentials.config
可以删掉 production.key(但要备份)
总结
开发环境
使用 master.key 和 credentials.yml.enc
master.key 被 git ignore
如果 .enc 不被 git ignore,那就多人共用 master.key
如果 .enc 要被 git ignore,那就每个人创建自己的 master.key
生产环境
使用 production.key 和 production.yml.enc
production.key 被 git ignore,内容写到环境变量
.env 不被 git ignore
读取 key 们的代码跟开发环境一模一样