bentools / shh-bundle
一个用于处理机密的Symfony扩展包。
1.2.0
2023-03-04 07:03 UTC
Requires
- php: >=8.0
- bentools/shh: ~1.0
- symfony/config: ~5.4|~6.0
- symfony/console: ~5.4|~6.0
- symfony/dependency-injection: ~5.4|~6.0
- symfony/filesystem: ~5.4|~6.0
- symfony/http-kernel: ~5.4|~6.0
Requires (Dev)
- bentools/cartesian-product: ^1.3
- nyholm/symfony-bundle-test: ^1.4
- php-coveralls/php-coveralls: ^2.1
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ~7.0|~8.0
- squizlabs/php_codesniffer: ~3.7
- symfony/framework-bundle: ~5.4|~6.0
- symfony/var-dumper: ~5.4|~6.0
- thecodingmachine/safe: ^1.0
This package is auto-updated.
Last update: 2024-09-04 10:13:58 UTC
README
Shh! 🤫
Shh! 是一个用于在Symfony应用程序中处理机密的示例。
为什么?
我刚刚阅读了来自 Matthias Pigulla 的 Storing secrets for Symfony applications,其中提供了一个使用Ruby驱动的外部程序的解决方案。
然后我想到了以下问题:为什么没有PHP的实现呢?🤔
以下是关键原则
- 将机密存储在环境变量中实际上会通过
phpinfo()
、报告、日志和子进程暴露它们。 - 感谢Symfony的Env Var Processors,Shh 会以加密的方式暴露它们。它们将在最后一刻解密。
- 需要私钥和一个可选的密码才能解密机密。它们应该被 .gitgnored。
- 然后您可以提交加密的机密到VCS,只要私钥被安全存储和传达。
- 您可以在任何时候更改您的密码。
安装
composer require bentools/shh-bundle:^1.0
配置
- 将扩展包添加到您的内核(哦,您不是在使用Flex?)。
- 生成您的密钥
- 在您的配置目录中创建一个
shh
目录mkdir -p config/shh
(或者对于Symfony 3,使用mkdir -p app/config/shh
) - 运行
php bin/console shh:generate:keys
- 如果您提供了密码,请将其存储在环境变量
SHH_PASSPHRASE
中 - 将
config/shh/private.pem
(或者对于Symfony 3,使用app/config/shh/private.pem
)添加到您的.gitignore
并上传到您的生产服务器。
- 在您的配置目录中创建一个
然后您就可以开始了!
如果您想进行不同的配置,请查看配置参考以了解可用的选项。
使用方法
检查环境是否正确配置
bin/console shh:check // Will check that encryption / decryption work - both private and public keys are needed.
bin/console shh:check --encrypt-only // Will check that encryption works - only public key is needed?
加密一个值(需要公钥)
bin/console shh:encrypt
解密一个值(需要公钥和私钥)
bin/console shh:decrypt
解密环境变量中的机密
此库包含一个环境变量处理器。您可以使用它如下
# config/services.yaml parameters: some_secret_thing: '%env(shh:SOME_ENCRYPTED_SECRET)%'
处理机密文件
您可以将加密的机密存储在项目目录根部的.secrets.json
文件中(您可以在环境变量SHH_SECRETS_FILE
中设置不同的路径)。
此文件可以安全地提交到VCS(只要私钥不是)。
要加密并在该文件中注册机密,请运行以下命令
bin/console shh:register:secret my_secret # You will be prompted for the value of "my_secret"
然后您可以在以下方式中使用您的机密来配置配置文件
# config/services.yaml parameters: my_secret: '%env(shh:key:my_secret:json:file:SHH_SECRETS_FILE)%'
更改密码
如果您需要,可以更改密码:这将生成一个新的私钥。公钥保持不变。
bin/console shh:change:passphrase
因此,将重新生成一个新的私钥。您只需更新它在所有使用的地方,并更新环境变量SHH_PASSPHRASE
。
例如,每次员工离职时,您都可以这样做。
配置参考
# config/packages/shh.yaml parameters: env(SHH_SECRETS_FILE): '%kernel.project_dir%/.secrets.json' shh: private_key_file: '%kernel.project_dir%/config/shh/private.pem' public_key_file: '%kernel.project_dir%/config/shh/public.pem' passphrase: '%env(SHH_PASSPHRASE)%'
测试
./vendor/bin/phpunit
反馈
不要犹豫,在Symfony Slack上联系我:@bpolaszek。
许可
MIT