rails密钥管理

2023年 10月 2日 39.4k 0

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 字段不是固定的

image.png

然后会自动通过这个key和master.key生成 credentials.yml.enc(如果不是创建新的
.enc文件会自动更新)

怎么查看临时文件里面的信息呢? rails自带的命令行可以查看

bin/rails console  或者  bin/rails c

然后输入

查看指定的key
Rails.application.credentials.secret_key_base

image.png

查看所有
Rails.application.credentials.config

image.png

生产环境

跟开发环境差不多,两个操作,写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 们的代码跟开发环境一模一样

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论