【发布时间】: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_client与openssl -startls smtp或openssl -startls imap以确定这是服务器端还是客户端问题。如果这是服务器端,您会看到不带 -starttls 的 TLS 1.2 和带 -starttls 的 TLS 1.0。