2

我正在使用z-push-contrib从 IMAP 服务器(也由我运行)获取电子邮件。

如果我使用该imap_open选项/ssl并连接到端口 993,则使用的是 TLS 1.2。

如果我使用/tls并使用 STARTTLS 连接到端口 143,则会使用 TLS 1.0 和不同的密码。

SMTP 行为相同(STARTTLS 仅使用 TLS 1.0)

如果我从命令行使用 openssl,则使用的是 TLS 1.2:

无论我使用 STARTTLS 连接到端口 993 还是 143,我总是使用相同的强大现代密码获得 TLS 1.2 连接。

这是 PHP 的 Openssl 实现中的错误吗?

4

1 回答 1

6

不,它是在PHP 文档中定义的:

  • /tls : 强制使用 start-TLS 加密会话,并拒绝连接到不支持它的服务器
  • /ssl : 使用安全套接层加密会话

差异非常微妙。基本上 StatTLS 连接到未加密的端口/连接,然后请求加密,而 TLS/SSL 会话在传输任何文本之前被加密(请参阅STARTTLS)。它们通常使用不同的端口,但邮件服务器通常同时支持两个端口(因此它们支持更广泛的客户端)。

Cipher 和 TLS 版本选择基于客户端-服务器协商,但 STARTTLS 可以理解为能力较差的客户端或服务器,则决策参数不同。

AFAIK,通过 STARTTLS 连接时对 TLS1.1 和 TLS1.2 的使用没有限制,但它们的连接方式与 TLS/SSL 不同。

有疑问,请使用 TLS/SSL,因为它更安全 :)


更新

PHP IMAP 扩展使用c-Client 库来实现 IMAP 协议特定的功能。这个库有点过时了(2007 年)——并且处理 STARTTLS 命令的方式可能与调用 openssl 的方式不同——这就是使用的加密/密码不同的原因。

于 2016-02-02T20:14:58.653 回答