在Java EE中安全地存储SMTP凭据

时间:2014-07-27 19:22:09

标签: java security java-ee smtp javamail

我有一个在GlassFish 4 / Java 8(x64)上运行的Java EE应用程序。开发是在Windows机器上,但最终将移植到Linux(Red Hat或Ubuntu)。在该应用程序中,我需要从需要用户身份验证的SMTP服务器发送电子邮件,并且我使用JavaMail来执行连接并发送电子邮件。在成功的用户注册,密码重置请求等期间,代表系统发送这些电子邮件。因此,发起操作的用户将不具有发送电子邮件的凭证。所有此类操作都使用相同的电子邮件凭据,并且相关的电子邮件帐户专用于此用途。

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

这方面有各种变化,我可以将密码的加密版本存储在数据库中或在应用程序中进行硬编码。那时,我回过头来找到一种存储密钥来解密密码的方法。

在Java EE中安全管理此类凭据有哪些方法?我是否坚持用纯文本存储?

1 个答案:

答案 0 :(得分:3)

首先,您的意思是“Java EE”,there is nothing named "JEE"

执行此操作的典型方法是将JavaMail会话配置为应用程序服务器中的受管对象(本例中为GlassFish),并在应用程序中查找或注入该Session。会话的配置将包括用户名和密码。这会将密码保留在您的应用程序之外,但任何能够读取服务器上的GlassFish文件的人都可以访问它。为了进一步保护密码,您可以将密码存储在密钥库中,使用密码别名从会话配置中引用密码,并为GlassFish设置主密码以保护密钥库。我相信你会在GlassFish文档中找到更多细节;对不起,我没有方便的链接。