java-通过TLS连接通过SMTP发送电子邮件会加密用户名和密码吗?

我已经用Java编写了一个发送电子邮件的应用程序.为了发送电子邮件,我使用了带TLS的SMTP.

最近,我搜索了TLS,并在this website上找到了有关TLS的流动描述:传输层安全性(TLS),该协议可以安全地加密和传送邮件,有助于防止邮件服务器之间的窃听和欺骗(邮件伪造).

上面的短语说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在从我的服务器发送到另一台服务器时是否会加密我的密码?我应该担心吗?

解决方法:

密码传输和通信加密是两个独立的问题.

通过发出STARTTLS命令,首先通过未加密的通道启动TLS.如果服务器支持,则交换完成,完成后,通道将被加密.

然后,SMTP协商才开始.谈判的一部分是身份验证(如果有).而且,即使您使用普通的身份验证机制(用户和密码都是通过有线方式发送的),由于该通道当时是加密的,所以窃听者不会清楚地看到它.

当然,为了提高安全性,您可以选择使用其他认证机制,而不是普通认证机制(例如CRAM-MD5;存在其他认证机制).

编辑好,上面的答案只是部分准确;可以在this excellent answer on ServerFault by @Bruno中找到更多详细信息

上一篇:PHP加密的SSL会话数据


下一篇:使用AES /十六进制将ColdFusion加密转换为C#