在 Java Tomcat Web 应用程序中存储加密密钥以加密/解密数据库中的敏感数据的最佳实践是什么?

Chr*_*ams 5 java encryption postgresql spring tomcat

我们遇到了在将某些敏感数据存储到 PostgreSQL 数据库之前对其进行加密的要求。我们的应用程序是一个运行在 Tomcat 之上的 Spring 应用程序。我们需要存储密钥,以便我们的 Web 应用程序可以在插入数据之前对其进行加密,并在检索数据后对其进行解密。

我们希望避免将此类内容存储在我们的配置文件(或由 Maven 过滤的文件)中,因为这些文件已签入源代码管理并可供任何有权访问的人读取。我们似乎在数据库凭据方面遇到了同样的问题,但看起来JNDI 数据源可以解决这些问题。

使用 Tomcat 时是否有最佳实践?环境变量之类的东西可能有用,但维护起来很麻烦。

编辑:为了澄清,我们试图防止由于未经授权访问实际数据库文件而导致敏感数据丢失。我们的数据库与应用程序服务器位于不同的物理盒子上,因此我们可以轻松地将密钥保留在应用程序服务器所在的服务器上。

Nei*_*gan 0

你不需要加密。您需要访问控制。

最佳实践?是的。便宜的?不:

  1. 不要使用单个 Web 服务器用户帐户登录数据库。这允许通过 SQL 注入进行权限升级和数据窃取。每个用户使用唯一的连接。这会终止连接池,并允许每个数据库盒最多允许 500 个并发用户。

  2. 使用支持行级安全性和列级安全性的数据库。现在,这只是甲骨文。PG9.5会有。你可以在9.4中模仿它

  3. 将数据库放在自己的网络区域中。只有 Web 服务器可以连接。

  4. 使用DAM(数据库活动监视器)来查找错误的查询和过多的数据输出。

指南:https://securosis.com/assets/library/reports/Securosis_Understanding_DBEncryption.V_.1_.pdf