【问题标题】:does sending email via SMTP with TLS connection encrypt the username and password?使用 TLS 连接通过 SMTP 发送电子邮件会加密用户名和密码吗?
【发布时间】:2015-06-25 08:04:50
【问题描述】:

我用 Java 编写了一个发送电子邮件的应用程序。对于发送电子邮件,我使用了 SMTPTLS

最近我搜索了有关 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 是否会加密我的密码?我应该担心吗?

【问题讨论】:

    标签: java security ssl encryption smtp


    【解决方案1】:

    密码传输和通信加密是两个不同的事情。

    TLS 通过发出 STARTTLS 命令在最初未加密的通道上启动;如果服务器支持,则交换完成,完成后,通道被加密。

    只有这样 SMTP 协商才开始;这种协商的一部分是身份验证(如果有的话)。而且即使你使用普通的身份验证机制(用户和密码按原样通过网络发送),由于当时通道是加密的,窃听者也不会清楚地看到它。

    当然,为了提高安全性,您可以选择使用另一种身份验证机制而不是普通的身份验证机制(例如 CRAM-MD5;其他存在)。


    编辑好的,上面的答案只是部分准确;更多详情请见this excellent answer on ServerFault by @Bruno

    【讨论】:

    • 所以如果我理解正确的话,TLS 会建立一个安全和加密的通信通道,然后通过这个通道 SMTP 尝试验证我的用户和密码。我说的对吗?
    • 是的,确实是这样
    • TLS 也可以在建立 TCP 连接时启动,当使用 SMTPS 而不是 SMTP+STARTTLS 时(尽管在这个问题中显示的设置中似乎不是这种情况)。结果是一样的。
    • @Bruno 我记得,SMTPS 使用 SSL,而不是 TLS
    • @fge 两者都可以使用(如实践中的 STARTTLS),请参阅this question on SF。本质上,“SSL vs TLS”只是一些电子邮件客户端(例如 Outlook)使用的一个坏名字。 “STARTTLS”中的关键词不是“TLS”,而是“START”。否则,SMTPS 类似于 HTTPS,您启动 SSL/TLS 连接并在其上使用 SMTP(而不是 HTTP):您当然可以将 HTTPS 配置为使用 SSL 或 TLS(这只是版本/名称更改问题)。
    猜你喜欢
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2015-06-10
    • 2018-12-05
    • 2012-06-19
    • 1970-01-01
    • 2018-05-15
    • 2020-11-08
    相关资源
    最近更新 更多