【问题标题】:How do I securely store encryption keys in java? [closed]如何在 java 中安全地存储加密密钥? [关闭]
【发布时间】:2012-01-11 13:45:35
【问题描述】:

我有一个 java 属性对象,其中包含 Web 服务的身份验证信息。 我需要加密该数据,但我不知道我需要将加密密钥存储在哪里以确保其安全。

关于加密这些数据并以安全方式检索它的最佳做法是什么?

使用密钥库有什么好处吗?

ws_user=username
ws_password=password
ws_url=https://www.whatever.com/myservice

【问题讨论】:

  • 如果我的应用程序需要访问密钥,似乎没有办法“保护”它。如果我将它存储在密钥库中会更模糊,但它似乎并不更安全。我希望我错了:)
  • 这听起来最终像是一个引导问题。在链中的某个点,您必须有一个密钥来解密某些东西。即使您使用密钥库,也需要该密钥库的密码。有没有办法改变你的身份验证方案?此外,如果您在那里提问,您可能会在 security.stackexchange.com 上得到一些知识渊博的回复。
  • @mcfinnigan 这就是我的想法。我只是想看看有没有办法解决这个问题。
  • 要么您将加密密钥存储在某处(或将其嵌入代码中),要么您将相信存储设备是安全的。鸡和蛋,就像它一样。
  • 保护谁?对客户端 PC 的所有者进行安全防护是不可能的。

标签: java encryption keystore


【解决方案1】:

您的问题很常见。在 linux 中,用户密码存储在纯文本文件中。尽管只存储了密码哈希,但如果攻击者可以访问该文件,他很快就会使用离线字典攻击发现一些密码。在这种情况下,操作系统依赖文件权限来拒绝未经授权的用户访问。在你的情况下,它并没有太大的不同。必须正确配置密码文件权限,保证服务器的物理安全。

【讨论】:

  • 我遇到了客户的安全策略要求在配置文件中加密用户名/密码的情况。这看起来很傻,但我想我会在这里检查一下我是否遗漏了什么。
  • 对于 Linux 来说可能已经足够好了,但在 Windows 上呢?不幸的是,使用管理员权限仍然是常见的做法? UAC 不得不稍微改善这种情况,但大多数 Windows 用户仍然没有意识到接受 UAC 权限提升请求的影响
【解决方案2】:

这是一个鸡蛋问题。
然后,您将需要找到存储密钥库的密码的位置等等......

根据您的安全要求和需要,您可以使用对称加密对数据进行加密,并使用客户端证书身份验证通过远程服务器(您的服务器)检索密码。

或者您可以使用对称加密对数据进行加密,并将密码硬编码在您的 jar 中,这并不安全,但需要一些努力才能找到它,您可以将责任委托给文件系统权限,以确定谁可以访问您的文件。

【讨论】:

    【解决方案3】:

    我已经成功使用JasyptStringEncrytor 来加密属性文件中的敏感信息以及一些用于生成盐和检索密码的内部程序。由于您使用的是 Web 服务,因此您可以使用 Jasypt 的 Web PBE Configuration 在部署时手动输入密码,甚至推出您自己的类似解决方案。

    【讨论】:

    • 嗨,Dan,您使用过 Web PBE 配置吗?我认为它可以解决鸡蛋问题(总是需要一个主密钥来加密文本)。它必须如何设置?我有点疑惑。谢谢您的帮助!五、
    【解决方案4】:

    最重要的是,某处需要以未加密形式拥有“链的根”密码。受操作系统保护的本地文件、受操作系统保护的远程文件、在源中硬编码等。

    解决此问题的唯一方法是要求人工在应用程序启动时输入初始密码,这对于需要自动启动的应用程序显然是不可能的。

    【讨论】:

      猜你喜欢
      • 2014-01-11
      • 2014-10-18
      • 2015-07-04
      • 2014-06-24
      • 2018-03-16
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      相关资源
      最近更新 更多