casahugo / secrets
Requires
- php: >=7.1.25
- paragonie/sodium_compat: ^1.17
- symfony/console: ^4|^5
Requires (Dev)
- composer/package-versions-deprecated: ^1.11.99
- friendsofphp/php-cs-fixer: ^2.18
- phpstan/phpstan: ^0.12.82
- phpunit/phpunit: ^7.5.20
- roave/security-advisories: dev-latest
- symfony/dotenv: ^4|^5
This package is auto-updated.
Last update: 2024-09-29 06:08:59 UTC
README
基于 symfony/framework-bundle 的 CLI PHP vault,链接:symfony/framework-bundle
安装
composer require casahugo/secrets
生成加密密钥
为了加密和解密密钥,应用程序需要加密密钥。可以通过以下命令生成一对密钥:
php vendor/bin/secrets --dir=config/secrets generate-keys
这将生成一对非对称加密密钥。每个环境都有自己的密钥集。假设你在开发环境中本地编码,这将创建
config/secrets/dev/dev.encrypt.public.php
用于加密/向保险库添加密钥。可以安全提交。
config/secrets/dev/dev.decrypt.private.php
用于从保险库中解密/读取密钥。开发解密密钥可以提交(假设开发保险库中没有存储高度敏感的密钥),但生产解密密钥绝不能提交。
你可以通过以下命令为生产环境生成一对加密密钥:
APP_ENV=prod php vendor/bin/secrets --dir=config/secrets generate-keys
这将生成 config/secrets/prod/prod.encrypt.public.php
和 config/secrets/prod/prod.decrypt.private.php
。
🚨 prod.decrypt.private.php 文件非常敏感。您的开发团队甚至持续集成服务都不需要这个密钥。如果解密密钥已经泄露(例如员工离职),您应考虑通过运行:secrets:generate-keys --rotate 生成新的密钥。
创建或更新密钥
假设您想将数据库密码存储为密钥。通过使用 set
命令,您应该将此密钥添加到开发环境和生产保险库中
# the input is hidden as you type for security reasons
# set your default development value (can be overridden locally)
php vendor/bin/secrets --dir=config/secrets set DATABASE_PASSWORD
# set your production value
APP_ENV=prod php vendor/bin/secrets --dir=config/secrets set DATABASE_PASSWORD
列出现有密钥
每个人都可以使用 list
命令列出密钥名称。如果您有解密密钥,还可以通过传递 --reveal 选项揭示密钥的值
php vendor/bin/secrets --dir=config/secrets list --reveal
------------------- ------------ -------------
Name Value Local Value
------------------- ------------ -------------
DATABASE_PASSWORD "my secret"
------------------- ------------ -------------
移除密钥
php vendor/bin/secrets --dir=config/secrets secrets:remove DATABASE_PASSWORD
本地密钥:覆盖本地密钥
开发环境中的密钥应包含适合开发的良好默认值。但有时开发人员仍然需要在开发时本地覆盖密钥值。
大多数密钥命令 - 包括 set
- 都有一个 --local
选项,该选项将“密钥”存储在 .env.{env}.local
文件中作为标准环境变量。要覆盖本地 DATABASE_PASSWORD
密钥,请运行
APP_ENV=prod php vendor/bin/secrets --dir=config/secrets set DATABASE_PASSWORD --local
如果您输入了 root,您现在可以在 .env.dev.local
文件中看到这个
DATABASE_PASSWORD=root
这将覆盖 DATABASE_PASSWORD
密钥,因为环境变量始终优先于密钥。
列出密钥时也会显示本地变量
php vendor/bin/secrets --dir=config/secrets list --reveal
------------------- ------------- -------------
Name Value Local Value
------------------- ------------- -------------
DATABASE_PASSWORD "dev value" "root"
------------------- ------------- -------------
命令还提供了 decrypt-to-local
命令,该命令解密所有密钥并将其存储在本地保险库中,以及 encrypt-from-local
命令将所有本地密钥加密到保险库中。
密钥轮换
generate-keys
命令提供了一个 --rotate
选项来重新生成加密密钥。应用程序将使用旧密钥解密现有密钥,生成新的加密密钥,并使用新密钥重新加密密钥。为了解密以前的密钥,开发人员必须拥有解密密钥。