
自從新的 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建議的解決方案,但無法使其工作。ssl_cipher_list
Dovecot 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。鴿舍提交
8f6f04eb
似乎為新的 Dovecot 選項奠定了基礎,該選項可能被命名ssl_ciphersuites
為 TLSv1.3 的新 OpenSSL 方法的前端,除了現有的ssl_cipher_list
TLSv1.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 應用程式部分正常運作,也沒有找到任何用於設定 OpenSSL 設定檔位置或要從 OpenSSL 設定檔中使用的應用程式部分名稱的 Dovecot 選項。也許其他人知道如何將 OpenSSL 設定定位到特定程式而不是系統範圍?
3. 最後,當然,您始終可以嘗試編輯原始程式碼。對於目前的 Debian dovecot 軟體包,您可以從複製開始
這條線,更改SSL_CTX_set_min_proto_version
為
SSL_CTX_set_max_proto_version
然後重新編譯。我自己其實也不想走那麼遠。您不妨開始直接使用上游而不是發行包。
答案2
首先,您必須找到 10-ssl.conf 檔案(通常位於 /etc/dovecot/conf.d/ 中)。
編輯並轉到包含的行ssl_協議(我的是第52行)。在該行中,您還可以拒絕協議。你可以試試
ssl_protocols = TLSv1.2 !TLSv1.3
答案3
我沒有嘗試或複製,但你可以嘗試設置ssl_min_協定到 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