我已经用Java编写了一个发送电子邮件的appilicaiton。要发送电子邮件,我已将SMTP
与TLS
一起使用。
最近我搜索了TLS,我在this website找到了关于TLS的流畅描述:Transport Layer Security (TLS), a protocol that encrypts and delivers mail securely, helps prevent eavesdropping and spoofing (message forgery) between mail servers.
上述短语表示TLS保证邮件将被安全传送,但它没有说明密码......
假设我在我的应用程序中使用以下代码,因此您可以看到您需要拥有用户名和密码的硬编码,而无需任何加密。
final String username = "...@hotmail.com";
final String password = "your Password";
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp-mail.outlook.com");
props.put("mail.smtp.port", "587");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
通过使用此策略,TLS在从我的服务器发送到另一台服务器时是否加密了我的密码?我应该担心吗?
答案 0 :(得分:4)
密码传输和通信加密是两个独立的事项。
通过发出STARTTLS命令,首先在未加密的通道上启动TLS;如果服务器支持它,那么交换就完成了,完成后,通道就会被加密。
然后才开始SMTP协商;如果有的话,这个协会的一部分就是认证。即使您使用普通的身份验证机制(通过线路发送的用户和密码),由于此时通道已加密,因此窃听者无法清楚地看到它。
当然,为了更高的安全性,您可以选择使用另一种身份验证机制而不是普通的(例如CRAM-MD5;其他存在)。
编辑好的,上面的答案只是部分准确;更多详情可在this excellent answer on ServerFault by @Bruno
中找到