强制 Dovecot 2.3.4.1 使用 TLSv1.2

强制 Dovecot 2.3.4.1 使用 TLSv1.2

自从 Debian Buster 更新以来,我遇到了 TLSv1.3 的一些问题。

问题:我的 iOS 邮件客户端无法连接到我的邮件服务器(12.2),而且我现在不想升级,因此我尝试找到一种方法来使用 dovecot 禁用 TLSv1.3。

当前版本为:OpenSSL 1.1.1c 和 Dovecot 2.3.4.1

在 Dovecot 2.3 中,SSL 设置从 ssl_protocols 更改为 ssl_min_protocol。

# Minimum SSL protocol version to use. Potentially recognized values are SSLv3,
# TLSv1, TLSv1.1, and TLSv1.2, depending on the OpenSSL version used.

但我想强制 Dovecot 使用 TLSv1.2,而不是使用最低 SSL 协议,因为 Dovecot 会先尝试可用的最高 SSL 协议(TLSv1.3)。如果我设置 TLSv1.3,它将不会使用 TLSv1.2。

那么,有人知道如何强制 Dovecot 2.3.4.1 使用 TLSv1.2 吗?

答案1

这不是一个完整的答案,但可能是解决方案的一部分:

1. 我尝试了 @joffrey 建议的解决方案,但无法使其工作。Dovecot ssl_cipher_list 2.3.4.1 似乎完全忽略了启用或禁用 TLSv1.3 密码套件。这 ssl_prefer_server_ciphers对 TLSv1.3 也没有任何影响。无论我尝试了什么 Dovecot 设置,我都无法阻止客户端协商 TLSv1.3 并选择它想要的任何 TLSv1.3 密码套件。

这可能与 OpenSSL 1.1.1 中引入了一种选择 TLSv1.3 密码套件的新方法有关,除了现有的选择 TLSv1.2 及以下版本密码的方法之外。OpenSSL 开发人员意识到这会造成不便,但表示这是不可避免的,请参阅 https://github.com/openssl/openssl/pull/5392. Dovecot 提交 8f6f04eb 似乎为新的 Dovecot 选项奠定了基础,可能被命名ssl_ciphersuites为 TLSv1.3 的新 OpenSSL 方法的前端,也是ssl_cipher_listTLSv1.2 及以下版本现有的前端。此提交最初包含在 Dovecot 2.3.9 中,但该版本尚未为 Debian 打包。此外,我没有看到 Dovecot 中提到的选项 消息或在线文档,所以也许它们尚未完成。

2. 另外,我发现添加MaxProtocol = TLSv1.2/etc/ssl/openssl.cnf作品(警告:这也会改变许多其他使用 OpenSSL 的程序的行为!):

[system_default_sect]
MinProtocol = TLSv1.2
MaxProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2

这会立即阻止 Dovecot 2.3.4.1 协商 TLSv1.3。甚至无需重新启动它。但是,如上所述,此解决方案还会影响其他应用程序,而不仅仅是 Dovecot,因此用途有限。

为了将设置专门针对 Dovecot,我尝试设置一个环境变量来指向特定的配置文件:

# OPENSSL_CONF=/etc/ssl/openssl-max-tlsv12.cnf dovecot -F

但这对 Dovecot 没有任何影响。我检查了该变量在环境中是否可见,并且它适用于其他 OpenSSL 应用程序。但是,我怀疑 OpenSSL 库本身不查看环境变量,并且调用程序(Dovecot)有责任以某种方式将变量的内容传递给库。我怀疑 Dovecot 会这样做,因为我在 Dovecot 源代码中没有看到 OpenSSL CONF 库的任何用途。我也无法让 OpenSSL 配置文件中的 dovecot 应用程序部分工作,也没有找到任何 Dovecot 选项来设置 OpenSSL 配置文件位置或要从 OpenSSL 配置文件中使用的应用程序部分名称。也许其他人知道如何将 OpenSSL 设置定位到特定程序而不是系统范围?

3. 最后,当然,你总是可以尝试编辑源代码。对于当前的 Debian dovecot 包,你可以从复制 这行,更改SSL_CTX_set_min_proto_versionSSL_CTX_set_max_proto_version然后重新编译。我自己并不想走那么远。那么你不妨直接开始使用上游而不是分发包。

答案2

首先,您必须找到 10-ssl.conf 文件(通常在 /etc/dovecot/conf.d/ 中)。

编辑并转到包含以下内容的行SSL 协议(我的是第 52 行)。在那一行中,您还可以拒绝协议。您可以尝试

ssl_protocols = TLSv1.2 !TLSv1.3

答案3

我没有尝试或复制,但你可以尝试设置ssl_min_protocol升级到 TLSv1.2 并定义ssl_密码列表不包括任何特定的 TLS1.3 密码

答案4

您可以使用此配置代码片段,放置在 local.conf 或 conf.d/10-ssl.conf 中

# doveconf -n | grep -iE "tls|ssl"
ssl = required
ssl_ca = </path/to/ca/bundle.pem
ssl_cert = </path/to/cert.pem
ssl_cipher_list = ALL:!RSA:!CAMELLIA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SHA1:!SHA256:!SHA384:!LOW@STRENGTH
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes

相关内容