Принудительное использование TLSv1.2 в Dovecot 2.3.4.1

Принудительное использование TLSv1.2 в Dovecot 2.3.4.1

После нового обновления Debian Buster у меня возникли проблемы с TLSv1.3.

Проблема: мой почтовый клиент iOS не может подключиться к моему почтовому серверу (12.2), и я не хочу обновляться прямо сейчас, поэтому я пытаюсь найти способ отключить TLSv1.3 с помощью dovecot.

Текущие версии: 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, но не смог заставить его работать. Включение или отключение наборов шифров TLSv1.3, ssl_cipher_list похоже, полностью игнорируется Dovecot 2.3.4.1. Это 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как front-end для нового метода OpenSSL для TLSv1.3, также в дополнение к существующей 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 делает это, потому что я не вижу никакого использования библиотеки OpenSSL CONF в исходном коде Dovecot. Я также не смог заставить работать раздел приложения dovecot в файле конфигурации OpenSSL, и я не нашел никаких параметров Dovecot для установки местоположения файла конфигурации OpenSSL или имени раздела приложения, которое будет использоваться из файла конфигурации OpenSSL. Возможно, кто-то еще знает, как нацелить настройки OpenSSL на конкретную программу, а не на всю систему?

3. Наконец, вы всегда можете попробовать отредактировать исходный код, конечно. Для текущего пакета Debian dovecot вы можете начать с дублирования эта линия, измените SSL_CTX_set_min_proto_versionна SSL_CTX_set_max_proto_versionи затем перекомпилируйте. Я сам не хотел заходить так далеко. Вы могли бы просто начать использовать upstream напрямую вместо дистрибутивного пакета.

решение2

Сначала вам необходимо найти файл 10-ssl.conf (обычно в /etc/dovecot/conf.d/).

Отредактируйте и перейдите к строке, содержащейssl_протоколы(у меня это строка 52). В этой строке вы также можете запретить протоколы. Вы можете попробовать

ssl_protocols = TLSv1.2 !TLSv1.3

решение3

Я не пробовал и не воспроизводил, но вы можете попробовать установитьssl_min_protolк 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

Связанный контент