Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP的IMAP:/ssl和/tls选择不同的tls版本_Php_Ssl_Starttls - Fatal编程技术网

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

通过PHP的IMAP:/ssl和/tls选择不同的tls版本,php,ssl,starttls,Php,Ssl,Starttls,我经常从IMAP服务器(也由我运行)获取电子邮件 如果使用imap\u open选项/ssl并连接到端口993,则使用TLS 1.2 如果我使用/tls并使用STARTTLS连接到端口143,则使用tls 1.0和不同的密码 SMTP的行为相同(STARTTLS仅使用TLS 1.0) 如果从命令行使用openssl,则使用TLS 1.2: 不管我是用STARTTLS连接到端口993还是143,我总是使用同样强大的现代密码获得TLS1.2连接 这是PHP的Openssl实现中的一个错误吗?不是,它

我经常从IMAP服务器(也由我运行)获取电子邮件

如果使用
imap\u open
选项
/ssl
并连接到端口993,则使用TLS 1.2

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

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

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

不管我是用STARTTLS连接到端口993还是143,我总是使用同样强大的现代密码获得TLS1.2连接

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

不是,它是在以下位置定义的:

  • /tls:强制使用start tls加密会话,并拒绝与不支持该会话的服务器的连接
  • /ssl:使用安全套接字层加密会话
差别非常微妙。基本上,StatTLS连接到未加密的端口/连接,然后请求加密,而TLS/SSL会话在传输任何文本之前进行加密(请参阅)。它们通常使用不同的端口,但邮件服务器通常在两个端口上同时支持这两个端口(因此它们支持更广泛的客户端)

密码和TLS版本选择基于客户机-服务器协商,但STARTTLS可能被理解为能力较差的客户机或服务器,因此决策参数不同

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

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


更新

PHP IMAP扩展利用了用于IMAP协议特定函数的。此库有些过时(2007年)-可能处理STARTTLS命令的方式与调用openssl不同-这就是为什么使用的加密/密码不同。

不,它的定义如下:

  • /tls:强制使用start tls加密会话,并拒绝与不支持该会话的服务器的连接
  • /ssl:使用安全套接字层加密会话
差别非常微妙。基本上,StatTLS连接到未加密的端口/连接,然后请求加密,而TLS/SSL会话在传输任何文本之前进行加密(请参阅)。它们通常使用不同的端口,但邮件服务器通常在两个端口上同时支持这两个端口(因此它们支持更广泛的客户端)

密码和TLS版本选择基于客户机-服务器协商,但STARTTLS可能被理解为能力较差的客户机或服务器,因此决策参数不同

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

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


更新


PHP IMAP扩展利用了用于IMAP协议特定函数的。这个库有些过时(2007年),可能处理STARTTLS命令的方式与调用openssl不同,这就是为什么使用的加密/密码不同。

您如何知道使用的是哪个版本?您是否进行了数据包捕获以查看ClientHello,还是在握手后检查了生成的协议?在最后一种情况下,可能只是为TLS1.0配置的服务器。我检查了服务器的日志和电子邮件头。正如我所写的,如果我通过Openssl直接连接,TLV1.2将按预期使用。服务器配置为使用TLS1、TLS1.1和TLS1.2,因为这是客户端上用于所有测试的同一OpenSSL,所以必须是使用它的应用程序(限制协议版本)或服务器。这不是OpenSSL本身的错误。这个服务器是公共的,这样人们就可以运行一些测试了吗?是的。我只是觉得奇怪的是,端口993使用TLS1.2,端口143只使用TLS1.0。您可以检查
openssl s_client
openssl-starts smtp
openssl-starts imap
来确定这是服务器端问题还是客户端问题。如果这是服务器端,您将看到不带-starttls的TLS1.2和带-starttls的TLS1.0。您如何知道使用的是哪个版本?您是否进行了数据包捕获以查看ClientHello,还是在握手后检查了生成的协议?在最后一种情况下,可能只是为TLS1.0配置的服务器。我检查了服务器的日志和电子邮件头。正如我所写的,如果我通过Openssl直接连接,TLV1.2将按预期使用。服务器配置为使用TLS1、TLS1.1和TLS1.2,因为这是客户端上用于所有测试的同一OpenSSL,所以必须是使用它的应用程序(限制协议版本)或服务器。这不是OpenSSL本身的错误。这个服务器是公共的,这样人们就可以运行一些测试了吗?是的。我只是觉得奇怪的是,端口993使用TLS1.2,端口143只使用TLS1.0。您可以检查
openssl s_client
openssl-starts smtp
openssl-starts imap
来确定这是服务器端问题还是客户端问题。如果这是服务器端,您将看到没有-starttls的TLS 1.2和有-starttls的TLS 1.0。我可能没有明确说明这一点,但使用openssl,如果我使用SSL端口(如993)或使用端口143并使用starttls,则没有什么区别。这两次都使用相同的TLS版本和相同的密码。这就是它的工作原理,在使用STARTTLS时,没有理由使用较弱的密码或TLS版本。STARTTLS也不适用于“能力较差的客户端”,但被认为不需要特定的SSL端口,因此是一种改进。这(我假设)是PHP的openssl或IMAP实现中的一种不良行为,或者是在Z-PUSH中的一种不良行为。我无法确定哪一种先出现,STARTTLS(1999,请参阅)或通过SSL为IMAP保留端口993。我真的不认为STARTTLS是