bentools/shh-bundle

一个用于处理机密的Symfony扩展包。

安装次数: 10,955

依赖项: 0

建议者: 1

安全性: 0

星标: 2

关注者: 4

分支: 0

开放问题: 0

类型:symfony-bundle

1.2.0 2023-03-04 07:03 UTC

This package is auto-updated.

Last update: 2024-09-04 10:13:58 UTC


README

Latest Stable Version License CI Workflow Coverage Status Quality Score Total Downloads

Shh! 🤫

Shh! 是一个用于在Symfony应用程序中处理机密的示例。

为什么?

我刚刚阅读了来自 Matthias PigullaStoring secrets for Symfony applications,其中提供了一个使用Ruby驱动的外部程序的解决方案。

然后我想到了以下问题:为什么没有PHP的实现呢?🤔

以下是关键原则

  • 将机密存储在环境变量中实际上会通过phpinfo()、报告、日志和子进程暴露它们。
  • 感谢Symfony的Env Var ProcessorsShh 会以加密的方式暴露它们。它们将在最后一刻解密。
  • 需要私钥和一个可选的密码才能解密机密。它们应该被 .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