在JavaEE中安全地存储SMTP凭据

在JavaEE中安全地存储SMTP凭据,java,security,jakarta-ee,smtp,jakarta-mail,Java,Security,Jakarta Ee,Smtp,Jakarta Mail,我有一个在GlassFish 4/Java8(x64)上运行的JavaEE应用程序。开发是在Windows机器上进行的,但最终将被移植到Linux(Red Hat或Ubuntu)。在该应用程序中,我需要从需要用户身份验证的SMTP服务器发送电子邮件,我使用JavaMail执行连接并发送电子邮件。这些电子邮件在成功的用户注册、密码重置请求等期间代表系统发送。因此,发起操作的用户将没有发送电子邮件的凭据。所有此类操作都使用相同的电子邮件凭据,并且所涉及的电子邮件帐户专用于此用途 立即想到的方法是将发

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

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

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

有什么方法可以在JavaEE中安全地管理这些凭证?我是否坚持以纯文本的形式存储这些内容?

首先,你的意思是“JavaEE”

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