【问题标题】:Secure way to store encryption keys - PHP存储加密密钥的安全方式 - PHP
【发布时间】:2014-06-24 23:38:23
【问题描述】:

我通过 PHP 使用 openssl 和 mysql 加密。 目前,我在php源代码中编写了密钥,但我认为它不是那么安全。如果有人得到源(可能是 FTP),加密就会被破坏。 那么,您将如何在 Linux 服务器上存储加密密钥?我无法使用其他网络服务器来存储密钥。

【问题讨论】:

  • 关于密钥管理的书籍已经写过。这完全取决于您的应用程序和组织结构,什么最适合您的特定用例。

标签: php mysql encryption


【解决方案1】:

我假设您使用的是 Apache。

将秘密数据放入/etc/apache2/envvars的环境变量中,设置所有者为root,权限为400。

攻击者必须破坏服务器才能获得您的密钥。

您还可以编写一个脚本,在 Apache 启动时询问密码(很烦人,但更安全)。

请注意,具有 root 访问权限的人将始终能够获取您的密钥,而试图向他们隐藏它只是一种安慰剂。

安慰剂解决方案:

  • 默认情况下使您的应用程序处于空闲状态,直到您将密钥发布到同一应用程序内的 HTTPS 页面,将密钥保存在全局变量中并继续您的业务。您必须考虑 PHP 进程的生命周期(当进程终止时,您必须重新发送密钥)。

【讨论】:

  • 我没有直接访问 shell,所以我应该把密钥交给系统管理员...绝对不是一个好主意:)
  • 系统管理员通常也可以访问您的应用程序。
  • @user1294101:如果您不信任您的系统管理员,您应该更改他们/在其他地方托管代码
  • 是的,我相信他们,但我们谈论的是明智的数据。我不想让他们直接给通行证。
  • 好的,但是如果我给他们或者他们在我的许多文件中搜索以获取通行证,那就不同了,不是吗?
【解决方案2】:

我相信您最好的(根据您的问题和 cmets)的赌注是将密钥粘贴在目录空间的某个位置。确保它们不在 www-root 等之下。使用适当的文件权限(取决于您的服务器设置)。

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2015-07-04
    • 1970-01-01
    • 2010-09-16
    • 2011-10-14
    • 1970-01-01
    • 2018-11-04
    • 2015-04-01
    相关资源
    最近更新 更多