Symfonyob娱乐下载 4.4新增功能:加密秘密管理
2019年10月24日·发表的哈维尔Eguiluz
存储敏感的应用程序信息(密码、令牌、证书等)是一项具有挑战性的任务。不能依赖传统的配置文件,也不能依赖环境变量。这就是为什么在Symfonyob娱乐下载 4.4中我们添加了一个新的基于加密的特性来管理机密。
想象一下你想要保留整个DATABASE_URL
内容机密,以避免泄露数据库连接凭据。你可以这样做:
步骤1。生成用于加密/解密秘密的密钥(此特性基于传统的公开密匙加密并使用libsodium库):
1
$PHP bin/控制台秘密:生成密钥
该命令生成一对密钥配置/机密/ dev /
(或配置/机密/刺激/
).公钥用于加密秘密,您应该将其提交到共享存储库。私钥不应提交到存储库,也不应以任何方式共享。
步骤2。使用SSH或任何其他安全方法将私钥上传到远程服务器,并将其存储在相同的服务器中环境配置/机密/ < > /
目录中。
步骤3。的内容创建一个新的秘密DATABASE_URL
:
1 2 3 4 5 6
$PHP bin/控制台秘密:集DATABASE_URL请类型the secret value: > ************** [OK] secret“DATABASE_URL”加密在“配置/机密/ dev /”;你可以承诺。
每个秘密都存储在自己的文件中环境配置/机密/ < > /
目录中。您可以将这些文件提交到存储库,因为除非您也拥有私钥,否则无法访问它们的内容。
这是所有。在你的配置文件中使用这个新的秘密,Symfony会在需要的时候透明地解密这个值:ob娱乐下载
1 2 3 4 5
#配置/包/ doctrine.yaml原则:dbal:url:“% env (DATABASE_URL) %”#……
对于想要转换为秘密的所有配置值,重复步骤3。使用其他命令完成整个密管体验:秘密:删除
为了消除秘密,秘密:列表
要显示应用程序管理的所有秘密,生成密钥,旋转
用新密钥更改现有密钥,并自动重新加密所有秘密等。
发表在#生活在边缘
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
然而,这篇博文可能会误导不熟悉安全的开发人员,并且应该更好地解释上下文。
首先,这个特性可以防止什么?
答:它不会改变任何攻击者获得访问服务器上的源代码文件,可以进行远程代码执行,甚至窥探内存中的执行代码。这将有助于防止开发人员在代码库中以普通方式存储密码的常见情况。
那么:为什么这个特性比使用env变量更安全呢?
为什么?这个特性是针对无法使用环境变量的情况吗?(共享主机,我想)或者使用环境变量(或本地存储的。env文件)来配置字符串现在已经过时了吗?
目标是将加密的敏感数据和密钥分开,以便在不同的文件夹中解密这些数据,但可能从同一点访问?
如果有人更改了数据库的密码,那么新密码必须提交到存储库?
也许我遗漏了什么。我很乐意说明这些好处。
谢谢你所做的工作
这个特性是通过使用相同的git工作流,使它更容易适当地处理秘密的代码(即git)。
它们是部署的一部分,应该完全分开管理。
不过,我不确定我是否完全被说服了。在不同的环境或安装中,环境变量似乎更容易覆盖。
我将继续使用环境变量,因为它们与部署机制集成得更紧密,也更标准。
我不太喜欢把这个添加到“最佳实践”中。我认为这有点像回到了“用Symfony的方式而不是行业标准的方式做事”的时代。ob娱乐下载
我猜所有的秘密都应该在提交的.env文件中有它的密钥?
我的意思是,如果我加密env FOO='bar',在。env文件中,我应该包括FOO=,只是为了参考,对吧?