Назад | Перейти на главную страницу

Обновление openssl с 1.0.1f до 1.0.1g сломало sendmail (SSL23_GET_SERVER_HELLO: ошибка декодирования предупреждений tlsv1)

Два дня назад я обновил openssl 1.0.1f до 1.0.1g. Вроде все нормально. Но через некоторое время в журнале sendmail выскочила ошибка:

OpenSSL 1.0.1g не работает

10 апреля, 10:13:45 почта sendmail [17568]: STARTTLS = клиент, ошибка: сбой подключения = -1, причина = ошибка декодирования предупреждений tlsv1, SSL_error = 1, errno = 0, retry = -1

10 апреля 10:13:45 почта sendmail [17568]: STARTTLS = клиент: 17568: ошибка: 1407741A: подпрограммы SSL: SSL23_GET_SERVER_HELLO: ошибка декодирования предупреждений tlsv1: s23_clnt.c: 762:

10 апреля 10:13:45 mail sendmail [17568]: набор правил = tls_server, arg1 = SOFTWARE, relay = mail.example.com, reject = 403 4.7.0 Подтверждение связи TLS не удалось.

Письмо не доставлено.

OpenSSL 1.0.1f работает

Затем я снизился до 1.0.1f, и письмо было отправлено с:

10 апреля 10:17:31 почта sendmail [31809]: STARTTLS = client, relay = mail.example.com., Version = TLSv1 / SSLv3, verify = FAIL, cipher = DHE-RSA-AES256-SHA, биты = 256 / 256

Похоже, что есть еще одно различие между двумя версиями openssl, чем только исправление ошибки heartbleed.

Сравнение версий

Затем я попробовал обе версии OpenSSL:

openssl s_client -starttls smtp -connect mail.example.com:25

Вывод OpenSSL версии 1.0.1g:

ПОДКЛЮЧЕНО (00000003)

140370040759952: ошибка: 1407741A: процедуры SSL: SSL23_GET_SERVER_HELLO: ошибка декодирования предупреждений tlsv1: s23_clnt.c: 762:


нет доступного однорангового сертификата


Имена ЦС сертификатов клиента не отправлены


Подтверждение SSL прочитало 131 байт и записало 552 байта


Новый, (НЕТ), шифр (НЕТ)

Безопасное повторное согласование НЕ поддерживается

Сжатие: НЕТ

Расширение: НЕТ


Вывод OpenSSL версии 1.0.1f (части):

ПОДКЛЮЧЕНО (00000003)

depth = 0 C = США, ST = Калифорния, L = Сан-Бруно, O = "IronPort Systems, Inc.", CN = Демонстрационный сертификат устройства IronPort

ошибка проверки: число = 20: невозможно получить сертификат местного эмитента

проверить возврат: 1

depth = 0 C = США, ST = Калифорния, L = Сан-Бруно, O = "IronPort Systems, Inc.", CN = Демонстрационный сертификат устройства IronPort

ошибка проверки: число = 21: невозможно проверить первый сертификат

проверить возврат: 1


Цепочка сертификатов

0 с: / C = US / ST = California / L = San Bruno / O = IronPort Systems, Inc./CN=IronPort Demo Certificate

i: / C = US / ST = California / L = San Bruno / O = IronPort Systems, Inc./CN=IronPort Demo Certificate


Сертификат сервера

--- отрезано ---


Имена ЦС сертификатов клиента не отправлены


Подтверждение SSL прочитало 1771 байт и записало 552 байта


Новый, TLSv1 / SSLv3, шифр DHE-RSA-AES256-SHA

Открытый ключ сервера 1024 бит

Поддерживается безопасное повторное согласование

Сжатие: НЕТ

Расширение: НЕТ

SSL-сессия:

Protocol  : TLSv1

Cipher    : DHE-RSA-AES256-SHA

---Snipped---

Что теперь?

Я так понимаю, что представленный сертификат от mail.example.com не предназначен для продуктивного использования ...

Есть ли способ обрабатывать такие сертификаты с помощью openssl 1.0.1g? mail.example.com один из нескольких коммуникативных партнеров, с которыми у меня проблемы.

Спасибо Тедди

Обстоятельства вынудили меня скомпилировать openssl 1.0.1g из исходников, и я столкнулся с поведением, идентичным описанному выше. Это под Fedora 18 на 64-битном Intel. Как и в исходных плакатах, большая часть почты отправлялась нормально, но в одном адресате почты были такие же ошибки установления связи TLS.

Журнал изменений openssl (краткий CL Вот, подробный CL Вот) показал только три изменения с 1.0.1f до 1.0.1g:

  • обновление безопасности
  • другое обновление безопасности
  • Добавьте обходной путь расширения TLS для неработающих серверов.

Предполагая, что третье изменение является причиной проблемы, я закомментировал одну строчку в ssl/tls1.h который, кажется, контролирует наличие этого «Заполнение TLS» модификация, вот так:

/* #define TLSEXT_TYPE_padding 21 */

Скомпилировал заново, библиотеку поставил .so файлы на месте, перезапущены sendmail, и без проблем вышла очередь почты. Надеюсь, в результате я не открыл новых вопросов.

Да, есть два решения:

  • Использовать SSLv3
  • компилировать без

    /* #define TLSEXT_TYPE_padding 21 */
    

Ссылка Вот.