Мы используем Postfix 2.9.4 и OpenSSL 0.9.8j-fips 07 января 2009 г. (SLES11 SP4).
Мы получаем это сообщение об ошибке при отправке почты определенному получателю:
error:1408D13A:SSL routines:SSL3_GET_KEY_EXCHANGE:unable to find ecdh parameters:s3_clnt.c:1336
Читая код в s3_clnt.c для нашей версии OpenSSL, он говорит в комментарии
На данный момент мы поддерживаем только именованные (не общие) кривые, а параметры ECParameters в этом случае составляют всего три байта.
При анализе кода это либо не именованный тип кривой, либо параметр вне допустимого диапазона.
Мой вопрос: как научить наш SMTP-клиент (или принимающий сервер) пропускать этот набор шифров / шифров или набор параметров?
Решение для определения конкретного списка шифров только для одного получателя:
master.cf: smtp2 unix - - n - - smtp -o tls_high_cipherlist=!ECDH:...(some more)
transport_map: <domain> smtp2:<domain>
(второй домен опускается?)
tls_policy_map: <domain> verify match=hostname ciphers=high
Это опускает проблемные алгоритмы ECDH, которые работали в этом сценарии.
Политика TLS для домена
Вы можете использовать Карта политик Postfix TLS для создания списка доменов и того, какие политики TLS к ним применяются.
Вы также можете изменить свой глобальный smtp
и smtpd
параметры в постфиксе, чтобы ограничить, какие шифры могут или должны использоваться.
Другой вариант в этом случае - указать, какие шифры использовать, как показано в Прямая секретность TLS в Postfix и perhaqps просто используйте strong.
smtpd_tls_eecdh_grade = strong | ultra
Вот пример /etc/postfix/tls_policy
.google.com secure match=.google.com:.gmail.com protocols=TLSv1 ciphers=high
.paypal.com secure match=.paypal.com protocols=TLSv1 ciphers=high
.example.tld ciphers=medium
.blizzard.com may
Затем создайте карту с помощью:
postmap tls_policy
В /etc/postfix/main.cf
вам понадобится:
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
В /etc/postfix/main.cf
вы можете попробовать исключить шифры с помощью smtpd_tls_exclude_ciphers
и smtpd_tls_mandatory_exclude_ciphers
и / или установить smtpd_tls_eecdh_grade = strong
Если настройка исключений шифров или установка tls_policy не помогает, вы можете рассмотреть возможность обновления openssl и postfix.
Вы можете использовать Postfix транспортная карта для маршрутизации почты в определенные пункты назначения через другую службу, определенную в master.cf
. Там вы сможете использовать обычные параметры конфигурации постфикса для TLS для включения / отключения шифров.
Более простой способ решить эту проблему (вместо введения новой записи master.cf для smtp) - использовать карту tls_policy и установить
tls_policy: <domain> verify hostname=<hostname> exclude=kECDH
Вот и все.
Если у вас нет tls_policy (в более старой версии postfix), вы можете использовать параметр
-o smtp_tls_mandatory_exclude_ciphers=kECDH
в записи master.cf для этого домена.
Спасибо всем участникам, которые помогли мне это выяснить ;-)