После нового обновления 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. Я попробовал решение, предложенное @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
в качестве интерфейса к новому методу 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
а затем перекомпилируйте. Мне самому не очень хотелось заходить так далеко. Тогда вы могли бы просто начать использовать апстрим напрямую вместо пакета распространения.
Я не пробовал и не воспроизводил, но вы можете попробовать установить ssl_min_protol в TLSv1.2 и определите ssl_cipher_list не включать специфические шифры TLS1.3.
Во-первых, вам нужно найти файл 10-ssl.conf (обычно в /etc/dovecot/conf.d/).
Отредактируйте и перейдите к строке, содержащей ssl_protocols (у меня строка 52). В этой строке вы также можете запретить протоколы. Можешь попробовать
ssl_protocols = TLSv1.2 !TLSv1.3
Вы можете использовать этот фрагмент конфигурации, помещенный в 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