Не на 100% уверен, что это проблема с Perl, но это похоже. У меня есть сценарий IPN, который соединяется с PayPal для проверки транзакций. Он работал нормально до вчерашнего дня, когда я установил LWP :: Protocol :: https. С тех пор он был сбой с ошибкой:Perl, LWP «проверка сертификата не удалась» с paypal.com
Can't connect to www.paypal.com:443 (certificate verify failed)
LWP::Protocol::https::Socket: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl5/LWP/Protocol/http.pm line 47.
Запуск GET https://www.paypal.com
от Баш (который использует LWP) дает такое же сообщение об ошибке. OTOH, работает GET https://www.gmail.com
успешно. Бег openssl s_client -host paypal.com -port 443
возвращается (между прочим) Verify return code: 0 (ok)
. curl "https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate"
успешно получает ответ от PayPal. Так что это похоже на Perl-специфику.
модуль версии:
LWP 6.13
LWP::Protocol::https 6.06
IO::Socket::SSL 2.015
Mozilla::CA 20141217 (note: I've tried the script both using Mozilla::CA and without it... results have been the same)
Пожалуйста, дайте мне знать, если есть другие соответствующие модули. Версия Perl - 5.10.1. OS Сервер RHEL 6.
Итак, следующие действия с моей стороны решают проблему: поскольку CPAN не включает способ откатывания модулей (в данном случае Mozilla :: CA), я загрузил старый пакет CA вручную и скопировал его в каталог Mozilla :: CA ('/ usr/local/share/perl5/Mozilla/CA'), заменив файл' cacert.pem'. Я думал, что LWP использовал Mozilla :: CA для своих сертификатов только в том случае, если был задан 'use Mozilla :: CA', и поведение по умолчанию состояло в использовании пакета CA сервера, но я предполагаю, что это не так? – Bintz
Распространение CPAN LWP :: Protocol :: https использует в настоящее время Mozilla :: CA как набор доверенных ЦС. Debian/Ubuntu исправил его вместо использования системного CA. Разумеется, будут использоваться и серверы, но только для листовых и промежуточных сертификатов и, конечно же, не для доверенного корня, который должен быть локальным. –
Благодарим вас за объяснение. Мне все ясно! – Bintz