IMAP通过PHP:/ ssl和/ tls选择不同的TLS版本

时间:2016-02-02 08:30:42

标签: php ssl starttls

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

1 个答案:

答案 0 :(得分:3)

不,它是在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) - 并且可能与调用openssl的方式处理STARTTLS命令的方式不同 - 这就是加密/密码使用差异的原因。