关于安全性:在Java EE中安全地存储SMTP凭据

Securely Storing SMTP Credentials in Java EE

我有一个运行在GalasFISH 4/Java 8(X64)上的JavaEE应用程序。开发是在Windows机器上进行的,但最终会移植到Linux(RedHat或Ubuntu)。在该应用程序中,我需要从需要用户身份验证的SMTP服务器发送电子邮件,我使用JavaMail执行连接并发送电子邮件。这些电子邮件是在成功的用户注册、密码重置请求等过程中代表系统发送的。因此,启动操作的用户将没有发送电子邮件的凭据。所有这些操作都使用相同的电子邮件凭据,相关电子邮件帐户专门用于此用途。

立即想到的方法是将发送电子邮件帐户用户名和明文密码存储在数据库或一些其他数据存储中,或者在Java EE应用程序中硬编码用户名和明文密码。这有一个明显的安全风险,通常与在明文中存储密码有关。

在这方面有一些变化,我可以在数据库中存储密码的加密版本,也可以在应用程序中硬编码。在这一点上,我要找到一种方法来存储密钥来解密密码。

在Java EE中如何安全地管理这些凭证?我是否一直坚持用纯文本存储这个?


首先,你的意思是"JavaEE",没有什么叫"JEE"。

实现这一点的典型方法是将Javamail会话配置为应用程序服务器中的管理对象(本例中是GlassFish),然后在应用程序中查找或注入该会话。会话的配置将包括用户名和密码。这将使密码不在应用程序中,但任何可以读取服务器上的glassfish文件的人都可以访问它。为了进一步保护它,您可以将密码存储在keystore中,使用密码别名从会话配置中引用它,并为glassfish设置主密码以保护keystore。我相信你会在Glassfish文档中找到更多的细节;对不起,我手边没有链接。