Rails中master.key与production.key等各环境.key文件的区别
Rails 中 master.key 与各环境专属密钥文件的核心差异
两类文件本质都是Rails用来解密对应加密凭据的AES密钥,核心区别在绑定的凭据范围、加载优先级、适用场景上:
各环境专属 .key 文件(development.key / test.key / production.key)
- 生成逻辑:执行
rails credentials:edit --environment <环境名>命令时自动生成,和config/credentials/目录下同名的<环境名>.yml.enc加密凭据文件一一绑定,比如development.key仅用来解密同目录下的development.yml.enc - 加载优先级:Rails运行在对应环境时,会第一优先级读取该环境的专属key解密对应凭据,不会跨环境混用
- 实际作用:实现多环境配置完全隔离,你可以在不同环境的凭据里存完全独立的ActiveRecord字段加密密钥、第三方服务密钥等敏感配置,哪怕开发环境密钥泄露,也不会影响生产环境的加密数据安全
- 注意:一旦丢失对应环境的key文件,同目录绑定的
.yml.enc加密凭据就无法解密,只能重置所有凭据内容。
master.key
- 生成逻辑:Rails新建项目时默认自动生成,绑定的是
config/根目录下全局的credentials.yml.enc加密凭据文件 - 加载优先级:仅当当前运行环境找不到对应专属环境key、也没有通过
RAILS_MASTER_KEY环境变量传入密钥时,才会回退使用master.key解密全局凭据 - 实际作用:用来解密所有环境通用的公共敏感配置,是多环境凭据功能上线前的默认全局密钥;如果你已经给所有环境都配置了专属凭据,master.key不会参与各环境专属凭据的解密流程,仅处理全局公共凭据的解密
- 生产场景注意:默认master.key会被加入
.gitignore不会被提交到代码仓库,生产环境通常不会直接部署该文件,而是通过环境变量注入密钥值完成凭据解密。
针对你使用ActiveRecord加密字段的场景补充:如果你把Active Record的加密根密钥存在了各环境专属的credentials配置里,那实际加解密数据库字段用的是对应环境的专属key,和master.key无关;只有把加密密钥存在全局
credentials.yml.enc里时,才会用到master.key。
内容的提问来源于stack exchange,提问作者udit
相关产品推荐
相关产品推荐

