【问题标题】:IMAP via PHP: /ssl and /tls choose different TLS version通过 PHP 的 IMAP:/ssl 和 /tls 选择不同的 TLS 版本
【发布时间】:2016-02-02 08:30:41
【问题描述】:

我正在使用 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 实现中的错误吗?

【问题讨论】:

  • 如何知道使用的是哪个版本?您是否进行了数据包捕获以查看 ClientHello,或者您是否在握手后检查了生成的协议?在最后一种情况下,它可能只是为 TLS 1.0 配置的服务器。
  • 我检查了服务器的日志和电子邮件标头。正如我所写,如果我直接通过 Openssl 连接,TLV1.2 将按预期使用。服务器配置为使用 TLS1、TLS1.1 和 TLS1.2
  • 由于对于所有测试,客户端上的 OpenSSL 都是相同的,因此它必须是使用它的应用程序,它限制了协议版本或服务器。这不是 OpenSSL 本身的错误。这台服务器是公开的,因此可以实际运行一些测试吗?
  • 是的。我只是觉得奇怪的是端口 993 使用 TLS1.2 而端口 143 与 STARTLES 仅使用 TLS1.0
  • 您可以检查 openssl s_clientopenssl -startls smtpopenssl -startls imap 以确定这是服务器端还是客户端问题。如果这是服务器端,您会看到不带 -starttls 的 TLS 1.2 和带 -starttls 的 TLS 1.0。

标签: php ssl starttls


【解决方案1】:

不,它是在PHP documentation 中定义的:

  • /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 library 来实现特定于IMAP 协议的功能。这个库有些过时(2007 年)——可能处理 STARTTLS 命令的方式与调用 openssl 的方式不同——这就是使用的加密/密码不同的原因。

【讨论】:

  • 我可能没有说清楚,但是如果我使用像 993 这样的 SSL 端口或使用端口 143 并使用 STARTTLS,使用 openssl 并没有什么不同。两次都使用相同的 TLS 版本和相同的密码。这就是它的工作方式,在使用 STARTTLS 时没有理由使用较弱的密码或 TLS 版本。
  • STARTTLS 也不适用于“能力较差的客户端”,但被认为不赞成对特定 SSL 端口的需求,因此是一种改进。 wiki.dovecot.org/SSL 这(我假设)是 PHP 的 openssl 或 IMAP 实现或 Z-Push 中的不良行为
  • 不能确定哪个先出现,STARTTLS(1999,参见RFC)或为 IMAP over SSL 保留端口 993。
  • 我真的不认为 STARTTLS 是一种升级,尽管从历史上看它可能被视为如此。中间的一个简单的人可以拦截服务器250 STARTTLS 请求并删除/更改它,使完整的连接文本/纯文本。 Dovecot 只是一个邮件提供商,他们可以在每个端口上启用这两种协议,其他人可能会以不同的方式处理这个,但大多数接受端口 143 上的加密连接(尽管没有那么多接受端口 993 上的非加密连接)
猜你喜欢
  • 1970-01-01
  • 2010-12-01
  • 2016-11-07
  • 2019-03-28
  • 2021-08-13
  • 2021-12-10
  • 1970-01-01
  • 2016-04-03
  • 1970-01-01
相关资源
最近更新 更多