如果使用带 TLS 的安全 SMTP,电子邮件 headers 是否加密?

Are email headers encrypted if using secure SMTP with TLS?

我正在使用 nodemailer and mailgun to send transactional email from a web application. I have set secure=true when I create the SMTP transport 这意味着:

secure – if true the connection will use TLS when connecting to server. If false (the default) then TLS is used if server supports the STARTTLS extension. In most cases set this value to true if you are connecting to port 465.

对于电子邮件地址确认和密码重置电子邮件,我将令牌添加到电子邮件 header 作为 X-Email-Token 以便于测试(可以从 header 而不是解析电子邮件的 body)。无法读取邮件 body 的邮件服务器能否读取此 header 字段?

Could a mail server that can't read the body of the message read this header field?

误解警报secure=true 选项 and/or 使用 SSL(现已过时)或 TLS 来保护 e-mail 传输只会确保 SMTP 客户端和 SMTP 服务器之间的通信免受特定连接的连接窃听。

  • 接收 SMTP 服务器不一定是最终收件人的电子邮件服务器。
  • 接收 SMTP 服务器能够将邮件转发到另一个 SMTP 服务器而不使用 TLS。
  • 接收 SMTP 服务器可能是恶意的(例如,以防有人植入欺诈性 DNS MX 记录)并且可以读取邮件内容并对其中包含的信息进行恶意操作。

鉴于此 - TLS 不提供任何类型的 "real" e-mail 消息加密。 SMTP 仍然是 e-mail 相当于在没有信封的明信片上写邮件。

打个比方:将 TLS 与 SMTP 结合使用就像您开着令人毛骨悚然的货车 tinted-windows 从您家开车到街上的外发邮箱,但您将一张裸露的明信片放入邮箱 - 这意味着任何人在 postal-service 及以后仍然可以阅读邮件 - 但至少在街上 no-one 可以在您开车到出站邮箱时阅读邮件。

关于Headers和Body的区别:

MTA(邮件传输代理,即邮件服务器)能够读取邮件body消息 headers。在 SMTP 中,它们之间没有真正的区别,而 TLS 对所有这些完全视而不见,因为它只关心保护任意字节流。

TLS 仅提供 transport-level 安全性,这是 MTA 主机之间的连接 - 它不会阻止 MTA 阅读电子邮件。为此,您需要适当的消息加密,例如 PGP 或 S/MIME 和收件人的 public 密钥。

自以为是的咆哮:对于 Google 和其他互联网公司为保护网络所做的努力,令人惊讶的是没有真正推动保护 e-mail。对于 Office 365、Gmail、Outlook.com 等主要 e-mail 提供商来说,至少提供消息签名并不难(这可以通过提供消息签名轻松完成,前提是电子邮件通过他们自己的出站 SMTP 服务器并且用户具有 two-factor 身份验证)。同样的公司也能够为 public-keys 的分发设置良好的 PKI。消息签名几乎可以在一夜之间消除来自受信任 domain-names 的垃圾邮件,所以我们仍然有这个问题,这对我们这个物种来说有点尴尬。

这是一个与您想象的不同的加密用例。使用 SSL/TLS,您和服务器都可以阅读整个消息(包括 headers),但您和服务器之间的某个人不能。

如果您希望服务器无法读取邮件,则需要使用 GPG 之类的东西,并且您是正确的,您不能以这种方式或服务器加密 headers将无法传递消息。