Sendmail TLS не работает с 22.04 LTS Ошибка: ssl3_get_record: неверный номер версии после аутентификации

Вопрос или проблема

Я не могу заставить 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 между вашим клиентом и сервером.

Возможные причины проблемы и их решения:

  1. Проблемы с конфигурацией 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
  2. Проблемы с OpenSSL:
    Версия OpenSSL может влиять на совместимость. Возможно, стоит рассмотреть возможность обновления OpenSSL до версии 3.1.0 или выше, если это допустимо для вашей системы. Для начала, проверьте установленную версию OpenSSL с помощью команды:

    openssl version
  3. Несоответствие версий Sendmail:
    Версии Sendmail на ArchLinux (8.17.2) и Ubuntu (8.15.2) различаются, и это может быть одной из причин проблемы. Попробуйте обновить Sendmail до более новой версии, если это возможно. Для этого найдите и установите актуальный пакет Sendmail из репозиториев или соберите его из исходников.

  4. Логи Sendmail:
    Проверьте логи Sendmail для получения более подробной информации об ошибках. Логи могут находиться в /var/log/mail.log или /var/log/syslog. Эти логи могут дать подсказки о том, что именно пошло не так при установлении соединения.

  5. Проблема с AUTH:
    Как вы отметили, Sendmail может отправлять команду AUTH до установления TLS-соединения. Это может вызвать проблемы. Убедитесь, что ваша конфигурация TLS позволяет выполнение аутентификации после начала шифрования. Чаще всего, использовать OPTS=V в конфигурации нужного сектора может помочь.

  6. Тестирование:
    После внесения изменений, перезапустите Sendmail и выполните повторное тестирование с помощью openssl s_client:

    openssl s_client -starttls smtp -connect 127.0.0.1:587

    Также рекомендуется использовать параметры -debug для вывода более подробной информации.

Заключение

Если после выполнения всех вышеперечисленных шагов проблема не решена, существует возможность, что ошибки могут быть связаны с другими компонентами, такими как настройки firewall, конфликтами серверов или другими сетевыми проблемами. Если есть возможность, попробуйте протестировать Sendmail на чистой установке Ubuntu для исключения конфликтов с имеющимися пакетами.

В случае, если указанные шаги не приведут к успеху, приведенное выше решение путем обновления OpenSSL и Sendmail останется верным подходом.

Оцените материал
Добавить комментарий

Капча загружается...