首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TLS:旧Mac连接到SMTPS,而不是IMAPS

TLS:旧Mac连接到SMTPS,而不是IMAPS
EN

Security用户
提问于 2022-03-25 18:07:23
回答 2查看 80关注 0票数 0

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链接相同的库)时,会发生这样的情况。

代码语言:javascript
复制
$ openssl s_client -tls1 example.com:smtps 

(注:-tls1_2和-tls1_1没有得到客户的认可)

这表明,imaps连接的SSL版本处理存在问题,而不是smtps。那么服务器提供了什么呢?

使用最近版本的OpenSSL (1.1.1f)连接到服务器本身上的回送,这就是我看到的连接到SMTPS的内容:

代码语言:javascript
复制
$ openssl s_client -tls1_3 127.0.0.1:smtps 

这基本上是我所期望的。

然而,关于IMAPS:

代码语言:javascript
复制
$ 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)。

知道这里发生了什么吗?

EN

回答 2

Security用户

发布于 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的相关产出如下:

代码语言:javascript
复制
$ 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的输出,以获得定义密码和协议版本之间的关系。

票数 2
EN

Security用户

发布于 2022-03-25 19:05:14

问题似乎是cyrus-imapd使用默认的SSL,而postfix在某种程度上通过调用SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_VERSION);或类似的方式覆盖了该配置。

这可以用

代码语言:javascript
复制
nmap --script ssl-cert,ssl-enum-ciphers -p imaps 127.0.0.1

尽管

代码语言:javascript
复制
tls_versions: tls1_0 tls1_1 tls1_2 tls1_3

在我的imapd.conf中,只有tls1_2被提供。

要“修复”我应用的(通常不提供tls1_0tls1_1是一个特性而不是bug):

代码语言:javascript
复制
--- /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连接到smtpsimaps上的本地主机失败(尽管smtps是从其他地方工作的),结果导致了相同的原因(openssl.cfg),导致我沿着花园小路走下去。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/260690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档