Rails密钥管理

85 阅读1分钟

对称加密

masterKey  + keys => credentials.enc

credentials.enc + masterKey => keys

  • 开发者在临时文件里写好了keys
  • 用masterKey把keys加密,得到加密文件credentials.enc
  • 删除临时文件,keys再也不会被看见了
  • 把credentials.enc存到git里面,把masterKey排除git

如何读keys

打开控制台

bin/rails console
bin/rails c

输入代码

Rails.application.credentials.secret_key_base
Rails.application.credentials.github[:key]

如何写keys

命令

EDITOR="code --wait" bin/rails credentials:edit
或者
EDITOR="vim" bin/rails credentials:edit

细节

关闭编辑器后

  • keys 所在文件会自动销毁
  • .enc文件会自动更新

安全问题

支持多环境密钥

命令

EDITOR="code --wait" bin/rails credentials:edit --environment production

得到两个文件

config/credentials/production.key (被加入.gitignore)
config/credentials/production.yml.enc

打开控制台试下

RAILS_ENV=production rails c
Rails.application.credentials.secret_key_base

production.key复制到生产环境,可以删掉它,但要备份。