我最近一直在开发一个通过 SMTP 服务器发送电子邮件的 C# 客户端。但是,我一直在了解不同的术语,例如:STARTTLS/TLS/SSL ......
经过进一步调查,我发现 SMTP 客户端以 2 种不同的方式(2 种加密方式)与服务器通信;显式 SSL/TLS 和隐式 SSL/TLS。
据我了解,显式 SSL/TLS 是 STARTTLS 的工作方式,它会在不安全的连接上询问服务器是否支持 TLS,如果支持,它会继续使用加密连接。然而,隐式 TLS 从连接开始到结束都是安全的,它永远不会不安全。
我可能对此有误,如果我错了,请纠正我。
问题是为什么端口 587(显式 SSL/TLS)是端口 465(隐式 SSL/TLS)的首选端口。
我知道端口 465 已被弃用,我可以看到端口 587 的用处,它可以在加密和未加密的情况下工作,并且由客户端来找出服务器支持的内容。
但是我很少看到有利于易用性的安全更新,这就是我感到困惑的原因。为什么我们从完全安全变为仅在某些方面安全?
我希望我的问题是有道理的。
任何声称如此的文件都是历史性的。今天,首选端口 465。
它曾经是首选的原因(一些,不是所有的运营商):
IANA
我们现在都应该更喜欢隐式 TLS 的原因:
建议大家迁移到隐式 TLS。请仅使用安全传输方式发送邮件。请阻止或删除不必要的复杂性和故障模式。
目前情况正好相反。关于为什么,RFC 8314, 3的问题是:
SMTP 使用端口 25 进行服务器到服务器的通信,使用端口 587 进行客户端到服务器的通信。
这里的协议没有真正的区别,但是较大站点的管理员可能想要不同的策略来接收来自其他域的邮件与接收可能发送到其他域的自己客户的邮件,这就是存在两个不同端口的原因:它允许防火墙规则容易区分。
用于传入邮件的邮件服务器永远不需要验证用户的凭据,因此不需要授予他们对该数据库的访问权限,而用于传出邮件的邮件服务器需要对本地用户进行身份验证,因此他们确实需要该访问权限——但是他们不需要从世界任何地方都可以到达。
端口 465 是端口 25 的仅 SSL 变体,但这已经通过通过对命令的
STARTTLS
响应协商的机会加密进行了很好的处理EHLO
,并且STARTTLS
命令比先尝试端口 465 更快,遇到超时然后尝试端口25.端口 587 从未分配过仅 SSL 的变体端口,它的用例仍然相关。
服务器到服务器的传输使用机会加密,如果失败,可能会退回到未加密的传输——通过加密邮件本身提供端到端安全性,因为即使在服务器之间使用加密连接,邮件也会在每个服务器上处理.
客户端应该使用端口 587,协商加密并制定一个合理的策略,当协商失败时该怎么做,例如,继续使用质询-响应身份验证方法并以未加密方式传输邮件是可以接受的,而密码身份验证方案将如果没有下面的加密层,就会变得不安全。