我正在使用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文件中,并使用某种方法调用它们,也许是Context的方法。
有人可以解释一下(或者给我一些我能看到的链接)我该怎么做或更好?
任何帮助将不胜感激。
答案 0 :(得分:2)
一种有趣的方法是使用Vault。它是用于管理诸如凭证,API密钥等“秘密”的系统。
您可以执行其他操作,例如编写一些代码来自动加密和解密密码。
根据经验,确保不在生产计算机上安装JDK也很重要。如果你这样做,黑客就可以访问javap
这是Java反汇编程序。输出效果不会那么好,但可能足以让您了解用于保护密码的方法。
答案 1 :(得分:1)
这取决于你想要隐藏秘密的努力程度。最后 - 您必须将凭据存储在某处。您可以加密它们,但无论如何您必须将加密密钥存储在某处。
许多(甚至是成熟的)系统只是将用户名/密码作为平原存储在配置文件中,并依靠托管来确保系统安全。有些系统会对密码进行加密,但加密密钥在配置和密钥库中的任何位置都可用。它使得检索您的电子邮件密码有点复杂,但并不多。
我见过的最安全的方法是根据配置的密码(密码)和一些环境属性(IP,MAC,...)创建密钥。
所以 - 让我们切合实际。在大多数情况下,将您的SYSTEM凭证存储为平原可能没问题。您必须保护对系统的访问权限,因此无法获取配置文件。