web-dev-qa-db-ja.com

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が最小のSSLプロトコルを使用する代わりにTLSv1.2を使用するように強制したいと思います。なぜなら、Dovecotは利用可能な最も高いSSLプロトコル(TLSv1.3)の前に試行するからです。 TLSv1.3を設定した場合、TLSv1.2は使用されません。

それで、誰かがDovecot 2.3.4.1にTLSv1.2を使用させる方法を知っていますか?

ありがとうございました。

2
ochbob

私は試したり再現したりはしていませんが、 ssl_min_protol をTLSv1.2に設定して、 ssl_cipher_list を定義して 固有のTLS1.3暗号

1
Joffrey

完全な答えではありませんが、おそらくソリューションの一部です:

1. @joffreyによって提案された解決策を試しましたが、機能しませんでした。 Dovecot 2.3.4.1では、ssl_cipher_listでTLSv1.3暗号スイートを有効または無効にすることは完全に無視されているようです。 ssl_prefer_server_ciphersは、TLSv1.3にも影響を与えません。どのDovecot設定を試しても、クライアントがTLSv1.3をネゴシエートし、必要なTLSv1.3暗号スイートを選択するのを防ぐことができませんでした。

これはおそらく、TLSv1.2以下の暗号を選択するための既存の方法に加えて、TLSv1.3暗号スイートを選択するための新しい方法のOpenSSL 1.1.1での導入に関連しています。 OpenSSL開発者は、これが引き起こす不便を認識していましたが、それは避けられないと言いました https://github.com/openssl/openssl/pull/5392 を参照してください。 Dovecotコミット 8f6f04eb は、新しいDovecotオプションの基礎を築くようですが、これは、既存のものに加えて、TLSv1.3の新しいOpenSSLメソッドのフロントエンドとして、おそらくssl_ciphersuitesと名付けられるでしょう。 ssl_cipher_list for TLSv1.2以下。このコミットは最初にDovecot 2.3.9に含まれていましたが、そのバージョンはまだDebian用にパッケージ化されていません。また、Dovecot [〜#〜] news [〜#〜] に記載されているオプションやオンラインドキュメントが表示されないため、まだ完成していない可能性があります。

2.または、MaxProtocol = TLSv1.2/etc/ssl/openssl.cnfに追加しても機能することがわかりました(warning:これにより、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のソースコードでOpenSSL CONFライブラリが使用されていないので、Dovecotがこれを行うとは思えません。また、OpenSSL構成ファイルのdovecotアプリケーションセクションを機能させることもできませんでした。また、OpenSSL構成ファイルの場所やOpenSSL構成ファイルから使用するアプリケーションセクション名を設定するDovecotオプションも見つかりませんでした。おそらく他の誰かが、OpenSSL設定をシステム全体ではなく特定のプログラムにターゲティングする方法を知っていますか?

3.最後に、もちろん、いつでもソースコードを編集することができます。現在のDebian dovecotパッケージの場合、まず この行 を複製し、SSL_CTX_set_min_proto_versionSSL_CTX_set_max_proto_versionに変更してから再コンパイルします。自分でそんなに行きたくなかった。その場合は、配布パッケージの代わりに、直接アップストリームを直接使用することもできます。

1
Peter Nowee

まず、10-ssl.confファイル(通常は/etc/dovecot/conf.d/にあります)を見つける必要があります。

編集してssl_protocolsを含む行に移動します(私は52行目です)。その行では、プロトコルを拒否することもできます。あなたが試すことができます

ssl_protocols = TLSv1.2 !TLSv1.3
0
borekon

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
0
ecazamir