Проблемы с SSL в Perl LWP после обновления Debian Wheezy

Я только что обновился до Debian Wheezy от Lenny (длинная история), и некоторые из моих пакетов Perl по какой-то причине не производили обновление, в том числе Crypt::SSLeay (libcrypt-ssleay-perl).

Мне не удалось подключиться к своему платежному шлюзу с помощью кредитной карты с помощью LWP, пока я не установил libcrypt-ssleay-perl, и теперь он "работает", но для установления SSL-соединения требуется 15-20 секунд из-за ошибки "очень бесполезное сообщение об ошибке" в неизвестном состоянии ":

SSL_connect: до / подключить инициализации
SSL_connect: неизвестное состояние
(ожидание 15-20 секунд...) # этот комментарий от waldo22
SSL_connect: ошибка в неизвестном состоянии
SSL_connect: до / подключить инициализации
SSL_connect: клиент записи SSLv3 привет A
SSL_connect: сервер чтения SSLv3 привет A
SSL_connect: SSLv3 читает сертификат сервера A
SSL_connect: сервер чтения SSLv3 выполнен A
SSL_connect: обмен ключами клиента записи SSLv3 A
SSL_connect: спецификация A шифра изменения записи SSLv3
SSL_connect: запись SSLv3 завершена A
SSL_connect: сброс данных SSLv3
SSL_connect: чтение SSLv3 завершено A

У меня такое ощущение, что это как-то связано с изменением поведения LWP по умолчанию для центров сертификации и проверки сертификатов сервера:
https://stackoverflow.com/questions/74358/how-can-i-get-lwp-to-validate-ssl-server-certificates
и возможно:
https://stackoverflow.com/questions/5639803/aws-ses-certificate-verify-failed

Мой модуль Perl использует Crypt:: SSLeay через LWP:: useragent.

Очевидно, 15-20 секунд - это слишком долго, чтобы ждать соединения SSL, но без более полезного сообщения об ошибке я не знаю, что делать.

Кто-нибудь есть какие-либо предложения о том, как лучше отладить это или получить более подробный вывод?

Огромное спасибо,

-Wes

1 ответ

Решение

Вау, этот был чокнутым.

Кажется, есть проблема с OpenSSL 1.0.1, где попытка автоматического согласования с TLS1.1 (или 1.2???) с некоторыми серверами (редактирование: серверы BigIP с микропрограммой < 10.2.4) заставляет эти серверы разрывать соединение и отклонить запрос. Увидеть:

https://bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=665452

Я пытаюсь подключиться к шлюзу кредитных карт Paypal "Payflow Pro", и PayPal изначально был одним из главных виновников в списке.

Согласно сообщению об ошибке, они говорят, что это "исправлено" для Paypal в 1.0.1b, но я использую 1.0.1c-3 и все еще испытываю проблему. Я не знаю, означает ли это, что это исправлено для www.paypal.com но нет payflowpro.paypal.com, или что.

ВОЗМОЖНОЕ РЕШЕНИЕ: настройка $ENV{HTTPS_VERSION} = 3 заставить SSL3 решить проблему, по крайней мере, для Crypt:: SSLeay.

Предположительно это работает, потому что он не пытается согласовать TLS1.1, а просто использует SSL3.

Тестирование с openssl s_client, работает с опциями -ssl3, -tls1, а также -no_tls1Так что, на мой взгляд, это проблема переговоров.

Во всяком случае, это обходной путь, по крайней мере.

Актуальная проблема вызвана ошибкой в ​​прошивке балансировщиков нагрузки F5 BigIP с прошивкой менее 10.2.4. Это приводит к тому, что соединения TLS 1.1 или 1.2 не отвечают должным образом на длинные запросы ClientHello и, таким образом, зависают.

Реальное исправление состоит в том, чтобы обновить прошивку на балансировщике нагрузки BigIP до>= 10.2.4.

Конечно, Paypal/Payflow обвиняют OpenSSL в этом...

Другие вопросы по тегам