Два дня назад я обновил openssl 1.0.1f до 1.0.1g. Вроде все нормально. Но через некоторое время в журнале sendmail выскочила ошибка:
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 не удалось.
Письмо не доставлено.
Затем я снизился до 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
ПОДКЛЮЧЕНО (00000003)
140370040759952: ошибка: 1407741A: процедуры SSL: SSL23_GET_SERVER_HELLO: ошибка декодирования предупреждений tlsv1: s23_clnt.c: 762:
нет доступного однорангового сертификата
Имена ЦС сертификатов клиента не отправлены
Подтверждение SSL прочитало 131 байт и записало 552 байта
Новый, (НЕТ), шифр (НЕТ)
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ПОДКЛЮЧЕНО (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:
Предполагая, что третье изменение является причиной проблемы, я закомментировал одну строчку в ssl/tls1.h
который, кажется, контролирует наличие этого «Заполнение TLS» модификация, вот так:
/* #define TLSEXT_TYPE_padding 21 */
Скомпилировал заново, библиотеку поставил .so
файлы на месте, перезапущены sendmail
, и без проблем вышла очередь почты. Надеюсь, в результате я не открыл новых вопросов.
Да, есть два решения:
компилировать без
/* #define TLSEXT_TYPE_padding 21 */
Ссылка Вот.