2014-08-27 7 views
2

У меня есть система, которая отправляет данные клиентам с использованием Perl LWP. Они могут выбирать свой URL-адрес, а также POST или GET.Perl LWP GET или POST для URL-адреса SNI SSL

Новый клиент недавно пожаловался, что служба не работает, и они подозревают, что это потому, что их конечная точка использует протокол SNI SSL.

Глядя в журналы, все, что я вижу, это сообщение об ошибке «(проверка сертификата не удалась) (500 тайм-аутов на чтение)».

Есть ли способ узнать, является ли эта проблема из-за их SNI SSL или чего-то другого? Я думаю, что я могу решить проблему, отключив verify_hostname, но это последнее средство, я бы предпочел, чтобы он работал правильно.

Какие еще меры следует предпринять?

+2

* «Я думаю, что я могу решить проблему, выключив verify_hostname ...» * - Не делайте этого. Это называется убийство пациента. Лечение хуже, чем болезнь. – jww

+1

* «Глядя в журналы, все, что я вижу, это сообщение об ошибке» (проверка сертификата не удалась) (500 тайм-аутов на чтение) »* - Нам нужна дополнительная информация. Пожалуйста, укажите URL-адрес сервера или сертификат сервера. , вставьте полный вывод 'openssl s_client -connect : '. Вы также должны указать свой код. – jww

+0

@jww - Я согласен с именем verify_hostname (отсюда это было последнее средство). Проблема была решена путем обновления IO :: Socket: : SSL в конце. Спасибо! –

ответ

8

Если SNI может быть проблемой, зависит от модуля, который вы используете, и их версии:

  • LWP использует IO :: Socket :: SSL, начиная с версии 6.0 в качестве библиотеки бэкенд SSL. До этого он использовал Crypt :: SSLeay, который не поддерживает SNI, и вы все равно можете использовать Crypt :: SSLeay. Но, хотя это может привести к тому, что сервер вернет неверные данные, он должен в большинстве случаев не приводить к проверке проблем, потому что Crypt :: SSLeay не проверяет, соответствует ли имя в сертификате запрашиваемому имени хоста (и, таким образом, в-середине атаки).
  • IO :: Socket :: SSL выполняет SNI на стороне клиента с версии 1.56 (02/2012), но вам нужна хотя бы версия 1.0 OpenSSL. Поддержка старых версий отключена из-за ошибок в OpenSSL при взаимодействии с некоторыми серверами.

Вы можете попробовать отладить проблему с настройкой $IO::Socket::SSL::DEBUG=4 при запуске кода.

+0

* «IO :: Socket :: SSL делает SNI с версии 1.56» * - Я думаю, что это 1,83 для сервера. См. Http://cpansearch.perl.org/src/SULLR/IO -Socket-SSL-1.83/Изменения. – jww

+0

Да, но мы говорим о LWP, и это означает клиент. Я сделал свой ответ более ясным в этом отношении. –

+0

Я был на версии 1.53 IO :: Socket :: SSL. Модернизация, похоже, разрешила это. Спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^