1

如果有什么方法可以知道客户端是否希望服务器启用 SSL?

我正在构建一个小型 SMTP 服务器并在 465 上实现了 SSL,但一些客户端不期望 SSL,因此显然连接失败。

有没有可能以任何方式告诉这一点?

4

1 回答 1

1

服务器没有干净的方法来检测客户端是否希望在连接开始时使用 SSL/TLS。事实上,如果期望服务器首先发送数据(就像 SMTP 的情况:服务器在客户端发送任何数据之前发送横幅),那么根本没有办法做到这一点。

这就是 SSL/TLS 通常以以下两种方式之一使用的原因:

  • 为协议的 SSL/TLS 版本指定了一个新的端口号。例如,HTTP(端口 443 而非端口 80)、IMAP(端口 993 而非端口 143)、SMTP(端口 465 而非 25 或 587)。如果服务器接受新端口上的连接,它就会立即知道使用 SSL/TLS。
  • STARTTLS:服务器和客户端通过协议的非 SSL/TLS 版本开始,但服务器在其服务能力声明中指示 STARTTLS。客户接受报价并提出要求。服务器和客户端现在都使用 SSL/TLS 重新启动协议。

STARTTLS 的效率有点低,因为服务器和客户端之间的非 SSL/TLS 对话首先发生(使用多个网络往返)并且它不适用于所有协议(HTTP 不支持它),但是如果可用,它通常是首选,因为它可以更轻松地自动配置电子邮件设置(无需探测一堆可能的端口并选择最好的端口)。

端口 465 是第一个解决方案的示例:选择一个新端口并在其上运行 SSL/TLS。这意味着服务器和客户端都应该立即使用 SSL/TLS 在该端口上进行通信。

如果您看到客户端尝试在端口 465 上使用纯文本 SMTP,则这些客户端是 BROKEN。真的没有什么可以解决的。客户有严重的错误,应该修复......

此外,对于 SMTP,您确实需要使用 STARTTLS,而不是 SMTP over SSL/TLS on port 465

于 2013-02-02T21:29:03.027 回答