TLDR Mac OS_X 10.11 /OpenSSL0.9.8zh使用TLS1.0成功连接到现代服务器的SMTPS端口,但不连接其IMAPS端口,尽管服务器和客户端都使用了相同的SSL库。知道这可能是什么吗?
调试详细信息:
在最近升级了我的Ubuntu邮件服务器之后,一个老客户端(MacOS-X10.11.6 Mail.app)成功地在IMAPS端口上连接,但没有连接到SSL端口;较新的客户端连接到这两个服务。通常,这个问题与LetsEncrypt证书链和过时的OS信任根有关(我已经修复了这个问题),但我确信情况并非如此,因为openssl s_connect表明在IMAPS和SSL上显示的证书是相同的(字节表示字节)。不幸的是,Mail.app几乎没有提供关于连接问题所在的信息(连接医生显示了一个红点,日志似乎表明了非常早期的TLS故障)。所以我试着看看cyrus和postfix处理他们的TLS连接的方式是否有什么不同,并想出了一些非常奇特的re版本管理方法。
服务器正在运行最新的Ubuntu 20.04.imapd和postfix都在使用libcrypto.so.1.1 (OPENSSL_1_1_0)。
不工作的客户端链接到/usr/lib/libcrypto.0.9.8.dylib。
TLS1.2是指从MacLS10.11(即这个版本--尽管它看起来不支持--见下文)支持,但我认为10.11中不支持TLS1.3。
当我使用openssl s_client (0.9.8zh,与Mail.app链接相同的库)时,会发生这样的情况。
$ openssl s_client -tls1 example.com:smtps (注:-tls1_2和-tls1_1没有得到客户的认可)
这表明,imaps连接的SSL版本处理存在问题,而不是smtps。那么服务器提供了什么呢?
使用最近版本的OpenSSL (1.1.1f)连接到服务器本身上的回送,这就是我看到的连接到SMTPS的内容:
$ openssl s_client -tls1_3 127.0.0.1:smtps 这基本上是我所期望的。
然而,关于IMAPS:
$ openssl s_client -tls1_3 127.0.0.1:imaps 这里有两个奇怪的地方。指定tls1_3会导致更少的输出;我认为这是一个时间问题,因为如果删除是固定的。但更重要的是,对于指定tls1_2的IMAPS来说,与SMTPS不同的是,它给出了New, TLSv1.0 (注1.0而不是1.2)。但是与tls1_0连接不起作用(无论是IMAPS还是SMTPS)。
知道这里发生了什么吗?
发布于 2022-03-25 18:40:44
TLS:旧Mac连接到SMTPS,而不是IMAPS
特别是在基于UNIX的系统中,SSL设置是特定于服务而不是机器全局的,这是非常普遍的。因此,SMTP和IMAPS可能使用不同的SSL配置,启用了不同的协议和密码。
但更重要的是,对于指定tls1_2的IMAPS,与SMTPS不同的是,它提供了新的TLSv1.0 (注1.0而不是1.2)。
IMAPS的相关产出如下:
$ openssl s_client -tls1_2 127.0.0.1:imaps New, TLSv1.0, Cipher is ...中显示的协议版本是SSL_密码学_到达_版本的结果,它“返回字符串,该字符串指示SSL/TLS协议版本that首先定义了密码__”。
因此,这不是用于TLS连接的协议版本,而是TLS1.2,如后面的Protocol : TLSv1.2中所示。相反,它是定义ECDHE-RSA-AES256-SHA的协议版本,即TLS1.0。使用SMTPS代替使用ECDHE-RSA-AES256-GCM-SHA384,这是在TLS1.2中定义的-因此TLS1.2显示为那里的密码版本。
还请参阅openssl ciphers -V的输出,以获得定义密码和协议版本之间的关系。
发布于 2022-03-25 19:05:14
问题似乎是cyrus-imapd使用默认的SSL,而postfix在某种程度上通过调用SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_VERSION);或类似的方式覆盖了该配置。
这可以用
nmap --script ssl-cert,ssl-enum-ciphers -p imaps 127.0.0.1尽管
tls_versions: tls1_0 tls1_1 tls1_2 tls1_3在我的imapd.conf中,只有tls1_2被提供。
要“修复”我应用的(通常不提供tls1_0和tls1_1是一个特性而不是bug):
--- /etc/ssl/openssl.cnf 2020-07-01 12:30:10.966775346 +0100
+++ /etc/ssl/openssl.cnf 2020-07-01 12:30:30.714978507 +0100
@@ -11,6 +11,8 @@
# defined.
HOME = .
+openssl_conf = default_conf
+
# Extra OBJECT IDENTIFIER info:
#oid_file = $ENV::HOME/.oid
oid_section = new_oids
@@ -349,3 +351,11 @@
ess_cert_id_alg = sha1 # algorithm to compute certificate
# identifier (optional, default: sha1)
+[default_conf]
+ssl_conf = ssl_sect
+
+[ssl_sect]
+system_default = system_default_sect
+
+[system_default_sect]
+CipherString = DEFAULT@SECLEVEL=1如果您试图启用实际上无法启用的TLS协议,IMHO cyrus-imapd应该记录某种形式的警告。
由于使用tls1_0连接到smtps或imaps上的本地主机失败(尽管smtps是从其他地方工作的),结果导致了相同的原因(openssl.cfg),导致我沿着花园小路走下去。
https://security.stackexchange.com/questions/260690
复制相似问题