SMTP 客户端如何确定是使用显式 SSL 还是隐式 SSL
Posted
技术标签:
【中文标题】SMTP 客户端如何确定是使用显式 SSL 还是隐式 SSL【英文标题】:How do SMTP clients determine whether to use Explicit or Implicit SSL 【发布时间】:2010-10-22 16:18:13 【问题描述】:大多数支持 SSL/TLS 的邮件客户端只需要用户说明是否应启用 SSL。用户无需了解显式和隐式 SSL 以及它们之间的区别。
那么,邮件客户端如何确定使用哪种类型的 SSL?它是否基于默认端口号?它只是尝试一个然后另一个?
【问题讨论】:
【参考方案1】:465 端口在商业邮件服务器中非常常见,并且经常使用。大多数情况下,它用于隐式 SSL。当您远程登录到此端口时,您将获得超时,因为您必须先设置 SSL 连接,然后才能与邮件服务器通信。因此,超时可能是您拥有隐式 SSL 连接的第一个线索。您不能使用 EHLO 来返回结果,因为除了 SSL 连接之外没有其他连接是被允许的。并且不,您不只是连接到运行隐式 SSL 的 SMTP 服务器,它不会响应并且只会断开连接。这就是它应该做的。显式 SSL 将首先允许连接,然后设置 SSL。是的,经常使用隐式 SSL。缺点是 RFC 标准并没有具体说明它是如何实现的,因此不同的开发人员以不同的方式设置它,即使隐式 SSL 被某些人认为已被贬低。
【讨论】:
【参考方案2】:我相信大多数支持 SMTP over SSL 的客户端都是从未加密的连接开始的,然后发出 EHLO 而不是 HELO。前者有额外的标志响应,其中一个指示服务器是否支持 STARTTLS 命令。如果他们这样做了,那么客户端可以使用 STARTTLS,然后从那时起使用 SSL。
例子:
% telnet quack.kfu.com 25
220 quack.kfu.com ESMTP ready NO UCE
EHLO client
250-quack.kfu.com Hello client [xx.xx.xx.xx] (may be forged), pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 25000000
250-ETRN
250-AUTH PLAIN LOGIN
250-STARTTLS
250-DELIVERBY
250 HELP
starttls
220 2.0.0 Ready to start TLS
【讨论】:
如果我 telnet 到端口 465 上的邮件服务器并发出 EHLO 命令,我没有得到任何响应。最终连接超时。我认为发出 EHLO 不足以确定是否支持隐式或显式连接。建立连接后,确定支持哪些类型的身份验证不是更重要吗? EHLO 只是表示服务器支持扩展 SMTP。恕我直言,在 SMTP 对话之前协商 SSL。 @unknown - 不,在此之前未协商 SSL。你连接到一个简单的 SMTP 服务器,然后“starttls”并在那个时候使用 ssl。 @jbutler:我以前从未听说过 SMTP 服务器在端口 465 上使用 SSL 进行侦听。如果您确实将 SMTP 服务器配置为以这种方式工作,那么您必须连接到该端口并在发送 EHLO/HELO 之前立即开始协商 SSL。在这种情况下,我希望 EHLO 不会报告 STARTTLS,因为它是多余的。 Starttls 仅用于显式 ssl 连接。它是必需的,因为显式连接是以明文方式启动的,然后客户端必须请求更改 tls。隐式 ssl 连接立即开始与 ssl 协商。【参考方案3】:邮件客户端在连接时必须知道是否使用了隐式 SSL,因为它负责使用 ClientHello
消息启动 SSL 握手。如何确定这取决于客户。端口号是一个很好的提示,但即使在使用标准(未受保护的)端口号时,某些 UI 中也可能会有一个复选框强制它。
有用于安全邮件的 IANA 注册端口号,但一些 ISP 可能使用其他端口。
IMAP/SSL:993 POP3/SSL:995SMTP/SSL 通常在端口 465 上提供,但这并未注册,并且由于 SMTP 代理广泛支持显式 SSL 支持而不太常见。
服务器可以使用特定于协议的协商来宣传对显式 SSL 的支持。例如,当客户端连接到 SMTP 服务器并发出 EHLO 命令时,服务器将列出其功能,其中可能包括对 STARTTLS 命令的支持。
【讨论】:
以上是关于SMTP 客户端如何确定是使用显式 SSL 还是隐式 SSL的主要内容,如果未能解决你的问题,请参考以下文章