为 Liferay 在 context.xml 中加密明文数据库密码

Encrypting clear text database password in context.xml for Liferay

如何加密 context.xml 文件中的明文密码?

我试过按照此处所述使用摘要:https://serverfault.com/questions/295628/how-do-i-use-non-plaintext-passwords-for-tomcat-users 但我的 portlet 最终会出现 "BeanLocator is null for servlet context" 错误。

也试过创建这个: How to avoid storing passwords in the clear for tomcat's server.xml Resource definition of a DataSource? 但无法加载我的 Class 文件(无ClassDefFound 异常)

或者上述方法是否有效,但我在实施时遇到了一些问题?

您提供的第一个 link 不适用于该问题,因为它适用于 tomcat 验证的用户 - 而不是数据源。 Liferay 使用完全不同的方式来识别用户并正确散列密码。

second link 就是您要查找的内容 - 为了使其正常工作,您必须将数据源工厂打包到 jar 文件中并将其添加到 tomcat 的全局文件中类路径,例如在 tomcat/lib 中,或者对于标准 Liferay 包,tomcat/lib/ext。如果您将 jar 打包到 Web 应用程序中,它将无法工作,因为它需要在整个服务器端可用,而不仅仅是在特定的 Web 应用程序中。

请注意该答案的评论:这与其说是加密,不如说是加扰,因为同一过程很容易被任何攻击者撤消。是的,它会提高标准,但它并没有真正增加强大的安全性。由于服务器迟早需要读取密码,因此除了在服务器启动时强制手动输入密码外,几乎没有其他方法可以确保此过程安全。那自然也不是很流行。

另一种选择是使用支持开箱即用的非明文密码保存的应用程序服务器。同样的限制适用于此:它只能对这些密码进行加扰,不能以安全的方式加密。