当使用PHP/MySQLI/Apache时,在哪里安全地存储证书/密钥


Where to securely store certs/keys when using PHP/MySQLI/Apache?

我有单独的web(Apache/PHP)和数据库(MySQL)服务器,它们通过SSL连接使用mysqli,运行良好。在框架内数据库连接库的ssl_set()函数中,我可以指定keys/pem文件的路径,只要它在docroot中即可。如果文件在docroot之外,我显然无法访问它们,并且连接失败。

在apachedocroot之外存储和访问mysql客户端ssl密钥最安全的方法是什么?

是否可以安全地使用"ini_set",从而允许"动态"访问,然后删除该参数?还是应该使用符号链接?

我在这里寻找最佳实践。我想这个问题并不局限于证书密钥,但我想确保你知道我的具体用例。

谢谢!

我在这里寻找最佳实践。我想这个问题并不局限于证书密钥,但我想确保你知道我的具体用例。

这个问题进入了一个领域,安全专家会对不同的威胁模型进行权衡,因此安全凭据管理没有"一个正确的答案"。然而,有很多明显错误的答案。

Chris Cornutt发表了一篇关于使用Docker保护PHP凭据的文章,我强烈建议阅读这篇文章,了解解决凭据管理所涉及的威胁和策略的背景信息。

一般来说,psecio/secure_dotenv将为大多数用户解决这个问题。这是一个用于管理凭据的开源库,该库在静止时对凭据进行加密存储。

如果您需要更高级的东西(或与产品集成,例如Vault),您可能需要请安全专家来审查您的设计和实现。