Вопрос или проблема
Я не могу заставить Sendmail работать с TLS (STARTTLS) на версии 22.04. У меня получается это сделать с той же конфигурацией на ArchLinux. Машины имеют почти идентичные файлы sendmail.cf и сертификаты, единственное отличие – это FQDN (каждая машина имеет другое имя).
Я запускаю:
openssl s_client -starttls smtp -crlf -connect 127.0.0.1:587
для тестирования соединения. Я отправляю “AUTH PLAIN {кодированный пользователь+ПАРОЛЬ}“, и ответ, который я получаю, это:
40A7380BB97F0000:error:0A00010B:SSL routines:ssl3_get_record:неверный номер версии:../ssl/record/ssl3_record.c:358
Я подозреваю, что проблема связана либо с версией установленного OPENSSL (3.0.2), либо с Sendmail (8.15.2-22ubuntu3), что вызывает какую-то проблему с совместимостью. ArchLinux имеет версию OpenSSL 3.1.4m и sendmail 8.17.2. Sendmail на Arch также имеет “TLS_EC TLS_VRFY_PER_CTX“, который отсутствует в 22.04 LTS.
Нет никаких проблем с AUTH без использования TLS, так как аутентификация происходит через plain, login, digest-md5, cram-md5.
строка 358 в ssl_record.c вызывается из следующего выражения:
if ((version >> 8) != SSL3_VERSION_MAJOR) {...
Возможно, проблема в том, что Sendmail добавляет “AUTH” перед отправкой:
read from 0x55577e53fef0 [0x55577e545623] (5 bytes => 5 (0x5))
0000 - **41 55 54 48 20** AUTH
write to 0x55577e53fef0 [0x55577e549773] (24 bytes => 24 (0x18))
0000 - **17 03 03 00 13**
На ArchLinux:
read from 0x56008b94e3b0 [0x56008ba2e3d3] (5 bytes => 5 (0x5))
0000 - **17 03 03 00 2d** ....-
read from 0x56008b94e3b0 [0x56008ba2e3d8] (45 bytes => 45 (0x2D))
0000 - 91 de e1 c7
Обратите внимание: 17 03 03 00, что является смещением в 22.04 LTS, так как отправляет “AUTH” перед информацией о версии
Я подумываю о принудительном обновлении OPENSSL и Sendmail до более поздних версий, чтобы посмотреть, устранит ли это проблему. Дайте знать ваше мнение.
Вот журнал от sendmail:
<-- AUTH PLAIN [СКРЫТО]
--- 235 2.0.0 OK Аутентифицировано
AUTH=сервер, relay=localhost [127.0.0.1], authid={userid}, mech=PLAIN, bits=0
отключение уровня 1
в фоновом режиме, pid=813342
--- 421 4.4.1 FQDN Потерян входной канал от localhost [127.0.0.1]
Сервер Sendmail закрывает TLS-сессию после “OK Authenticated” и openssl возвращает ошибку “ssl3_get_record:неверный номер версии“
Спасибо
Ответ или решение
Проблема, с которой вы столкнулись при использовании Sendmail с TLS (STARTTLS) на Ubuntu 22.04 LTS, связана с ошибкой SSL3: ssl3_get_record:wrong version number
. Эта ошибка обычно указывает на несоответствие протоколов TLS/SSL между вашим клиентом и сервером.
Возможные причины проблемы и их решения:
-
Проблемы с конфигурацией Sendmail:
Убедитесь, что в конфигурационном файле Sendmail (обычно этоsendmail.mc
илиsendmail.cf
) правильно указаны параметры для использования TLS. В частности, проверьте следующие параметры:define(
confAUTHMECHANISMS’,PLAIN LOGIN')
define(
confTLS_SRV_OPTIONS’,V')
define(
confTLS_MAINTAIN_HOSTNAMES’,Y')
- Убедитесь, что вы добавили корректные сертификаты и ключи:
define(`confCACERT_PATH', `/path/to/cacert.pem')dnl define(`confCACERT', `/path/to/cacert.pem')dnl define(`confSERVER_CERT', `/path/to/server-cert.pem')dnl define(`confSERVER_KEY', `/path/to/server-key.pem')dnl
-
Проблемы с OpenSSL:
Версия OpenSSL может влиять на совместимость. Возможно, стоит рассмотреть возможность обновления OpenSSL до версии 3.1.0 или выше, если это допустимо для вашей системы. Для начала, проверьте установленную версию OpenSSL с помощью команды:openssl version
-
Несоответствие версий Sendmail:
Версии Sendmail на ArchLinux (8.17.2) и Ubuntu (8.15.2) различаются, и это может быть одной из причин проблемы. Попробуйте обновить Sendmail до более новой версии, если это возможно. Для этого найдите и установите актуальный пакет Sendmail из репозиториев или соберите его из исходников. -
Логи Sendmail:
Проверьте логи Sendmail для получения более подробной информации об ошибках. Логи могут находиться в/var/log/mail.log
или/var/log/syslog
. Эти логи могут дать подсказки о том, что именно пошло не так при установлении соединения. -
Проблема с
AUTH
:
Как вы отметили, Sendmail может отправлять командуAUTH
до установления TLS-соединения. Это может вызвать проблемы. Убедитесь, что ваша конфигурация TLS позволяет выполнение аутентификации после начала шифрования. Чаще всего, использоватьOPTS=V
в конфигурации нужного сектора может помочь. -
Тестирование:
После внесения изменений, перезапустите Sendmail и выполните повторное тестирование с помощьюopenssl s_client
:openssl s_client -starttls smtp -connect 127.0.0.1:587
Также рекомендуется использовать параметры
-debug
для вывода более подробной информации.
Заключение
Если после выполнения всех вышеперечисленных шагов проблема не решена, существует возможность, что ошибки могут быть связаны с другими компонентами, такими как настройки firewall, конфликтами серверов или другими сетевыми проблемами. Если есть возможность, попробуйте протестировать Sendmail на чистой установке Ubuntu для исключения конфликтов с имеющимися пакетами.
В случае, если указанные шаги не приведут к успеху, приведенное выше решение путем обновления OpenSSL и Sendmail останется верным подходом.