我们将 Tomcat 用于我们的 Java Web 应用程序。WEB-INF 文件夹下有一个属性文件。
AES 加密将用于生成密钥和加密密码。加密的密码将存储在属性文件中。加密密钥应该存储在哪里?将密钥和加密密码放在同一个属性文件中是个好主意吗?还是应该将密钥存储在“webapps”目录之外?
我们将 Tomcat 用于我们的 Java Web 应用程序。WEB-INF 文件夹下有一个属性文件。
AES 加密将用于生成密钥和加密密码。加密的密码将存储在属性文件中。加密密钥应该存储在哪里?将密钥和加密密码放在同一个属性文件中是个好主意吗?还是应该将密钥存储在“webapps”目录之外?
在 Windows 上,您可以使用注册表和 DPAPI。使用注册表确实很糟糕,但如果您想获得绝对的安全性,并利用操作系统来存储有价值的数据,这是一个必要的痛苦。
在其他 OS X 上,您可以使用钥匙串。
在 linux 上,我会使用文件权限来保护文件。
你的提议:
将密钥和加密密码放在同一个属性文件中是个好主意吗?
就像将钱存放在保险箱中,然后在便签上将密码写到保险箱中,然后将便条贴在保险箱上。你所做的只是让小偷不以为然,但没有增加任何有意义的安全级别。
如果属性文件足够安全以容纳加密密钥,那么您可以将密码以明文形式存储在其中。
您是否考虑过 Java API 中的 KeyStore 类。它是 Sun 的 Java 密码体系结构的一部分。
我有以下建议,
不要将密钥存储在 WAR 中。我们将确保每次安装的密钥的责任都交给我们。在生产中,我们实际上可以通过将密钥文件存储在智能卡上来保护它。
确保您的密钥是版本化的,以便您可以定期轮换它。
存储密码短语以生成密钥,而不是原始密钥材料。这使得添加新密钥变得更加容易(您不必担心算法或密钥大小等)。它也增加了一些模糊性。