
新しい 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 は利用可能な最高の SSL プロトコル (TLSv1.3) を最初に試すため、最低限の SSL プロトコルを使用する代わりに、Dovecot に TLSv1.2 を使用するように強制したいと思います。TLSv1.3 を設定すると、TLSv1.2 は使用されません。
それで、Dovecot 2.3.4.1 で TLSv1.2 を使用するように強制する方法を知っている人はいますか?
答え1
完全な答えではありませんが、解決策の一部になるかもしれません:
1. @joffrey が提案した解決策を試しましたが、うまくいきませんでした。Dovecot ssl_cipher_list
2.3.4.1 では、TLSv1.3 暗号スイートの有効化または無効化は完全に無視されるようです。TLSv1.3
ssl_prefer_server_ciphers
にも影響はありません。どのような Dovecot 設定を試しても、クライアントが TLSv1.3 をネゴシエートして、必要な TLSv1.3 暗号スイートを選択するのを防ぐことはできませんでした。
これはおそらく、OpenSSL 1.1.1 で、TLSv1.2 およびそれ以下の暗号スイートを選択する既存の方法に加えて、TLSv1.3 暗号スイートを選択するための新しい方法が導入されたことに関係していると思われます。OpenSSL の開発者は、これがもたらす不便さを認識していましたが、避けられないものだと述べました。
https://github.com/openssl/openssl/pull/5392. Dovecotコミット
8f6f04ebssl_ciphersuites
これは、既存の TLSv1.2 およびそれ以下のものに加えて、TLSv1.3 の新しい OpenSSL メソッドのフロントエンドとして 名付けられる新しい Dovecot オプションの基礎を築くものと思われますssl_cipher_list
。このコミットは、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