我应该在哪里存储凭据和如何得到他们回来



我正在用java开发一个web应用程序。在开发电子邮件发送器时,我必须指定主机的凭据(电子邮件和密码)。

我正在做这样的事情:

public void sendEmail(String toAddress,
        String subject, String message) throws AddressException,
        MessagingException {
    // sets SMTP server properties
    Properties properties = new Properties();
    properties.put("mail.smtp.host", smtp.gmail.com);
    properties.put("mail.smtp.port", 587);
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");
    // Sender's email ID needs to be mentioned
    final String username = "user_mail";
    final String password = "password_mail";
    // creates a new session with an authenticator
    Authenticator auth = new Authenticator() {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    };
    Session session = Session.getInstance(properties, auth);
    // creates a new e-mail message
    Message msg = new MimeMessage(session);
    msg.setFrom(new InternetAddress(username));
    InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
    msg.setRecipients(Message.RecipientType.TO, toAddresses);
    msg.setSubject(subject);
    msg.setSentDate(new Date());
    // set plain text message
    msg.setText(message);
    // sends the e-mail
    Transport.send(msg);
}

我认为使用凭据的更好的做法是将它们保存在xml文件中,并使用一些方法(也许是上下文的方法)回叫它们。

有人可以解释我(或给我一些链接,我可以看到)我怎么能做到这一点或一些更好的?

任何帮助都将不胜感激。

一种有趣的方法是使用Vault。这是一个管理"秘密"的系统,比如凭据、API密钥等。

你还可以做一些其他的事情,比如编写一些代码来自动加密和解密密码。

根据经验,确保不在生产机器上安装JDK也很重要。如果你这样做了,黑客就可以访问javap,也就是Java反汇编器。输出不会那么好,但可能足以大致了解用于保护密码的方法。

这取决于您想在隐藏秘密方面投入多少精力。最后,您必须将凭据存储在某个地方。您可以加密它们,但无论如何都必须将加密密钥存储在某个地方。

许多(甚至是成熟的)系统只是简单地将用户名/密码存储在配置文件中,并依靠主机来保证系统的安全。有些系统对密码进行加密,但加密密钥无论如何都可以在配置和密钥存储库中的某个地方获得。它使找回你的电子邮件密码稍微复杂一点,但不是很多。

我见过的最安全的方法是基于配置的秘密(密码)和一些环境属性(IP, MAC,…)创建密钥。

让我们实际一点。在大多数情况下,将SYSTEM凭据存储为plain是可以的。您必须安全访问您的系统,所以应该没有办法获得配置文件。

最新更新