【发布时间】:2010-10-22 16:18:13
【问题描述】:
大多数支持 SSL/TLS 的邮件客户端只需要用户说明是否应启用 SSL。用户无需了解显式和隐式 SSL 以及它们之间的区别。
那么,邮件客户端如何确定使用哪种类型的 SSL?它是否基于默认端口号?它只是尝试一个然后另一个?
【问题讨论】:
大多数支持 SSL/TLS 的邮件客户端只需要用户说明是否应启用 SSL。用户无需了解显式和隐式 SSL 以及它们之间的区别。
那么,邮件客户端如何确定使用哪种类型的 SSL?它是否基于默认端口号?它只是尝试一个然后另一个?
【问题讨论】:
465 端口在商业邮件服务器中非常常见,并且经常使用。大多数情况下,它用于隐式 SSL。当您远程登录到此端口时,您将获得超时,因为您必须先设置 SSL 连接,然后才能与邮件服务器通信。因此,超时可能是您拥有隐式 SSL 连接的第一个线索。您不能使用 EHLO 来返回结果,因为除了 SSL 连接之外没有其他连接是被允许的。并且不,您不只是连接到运行隐式 SSL 的 SMTP 服务器,它不会响应并且只会断开连接。这就是它应该做的。显式 SSL 将首先允许连接,然后设置 SSL。是的,经常使用隐式 SSL。缺点是 RFC 标准并没有具体说明它是如何实现的,因此不同的开发人员以不同的方式设置它,即使隐式 SSL 被某些人认为已被贬低。
【讨论】:
我相信大多数支持 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
【讨论】:
邮件客户端在连接时必须知道是否使用了隐式 SSL,因为它负责使用 ClientHello 消息启动 SSL 握手。如何确定这取决于客户。端口号是一个很好的提示,但即使在使用标准(未受保护的)端口号时,某些 UI 中也可能会有一个复选框强制它。
有用于安全邮件的 IANA 注册端口号,但一些 ISP 可能使用其他端口。
SMTP/SSL 通常在端口 465 上提供,但这并未注册,并且由于 SMTP 代理广泛支持显式 SSL 支持而不太常见。
服务器可以使用特定于协议的协商来宣传对显式 SSL 的支持。例如,当客户端连接到 SMTP 服务器并发出 EHLO 命令时,服务器将列出其功能,其中可能包括对 STARTTLS 命令的支持。
【讨论】: