У меня есть скрипт Perl, который действует как веб-сервис для других скриптов Perl, работающих под одним и тем же доменом. Недавно я создал новый SSL-сертификат (AlphaSSL) для этого домена и установил его на сервере, и он отлично отображается при доступе к сайту с использованием https.Ошибка SSL-вызова веб-службы Perl через https с использованием LWP
Однако теперь, когда клиентский скрипт вызывает веб-службу с использованием htttps через LWP, выдается сообщение об ошибке, если раньше это не было. Код для вызова веб-службы выглядит следующим образом:
$useragent = LWP::UserAgent->new();
$useragent->agent("someagentid");
$postdata = {
'action' => $apiaction,
'xauth' => $REQUEST_AUTH_KEY,
};
$response = $useragent->post($BILLING_INFO_GATEWAY, $postdata);
Шлюз в пост является https: URL для сценария веб-службы под управлением одной и той же области.
Ошибка он производит:
500 Can't connect to xxxxx.com:443 (certificate verify failed)
Content-Type: text/plain
Client-Date: Tue, 25 Nov 2014 01:52:20 GMT Client-Warning: Internal response
Can't connect to xxxxx.com:443 (certificate verify failed)
LWP::Protocol::https::Socket: SSL connect attempt failed with unknown error
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify
failed at /usr/perl/lib/site_perl/5.10.1/LWP/Protocol/http.pm line 49.
Если добавить:
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
то ошибка уходит, но защищенное соединение кажется менее безопасным.
Я расположен каталог сертификат на моем сервере, который/SSL/сертификаты /, который имеет один файл .crt в нем, так что я попробовал, добавив:
$ENV{HTTPS_CA_PATH} = '/ssl/certs';
, но я все еще получаю ошибку. Я также попытался:
$ENV{HTTPS_CA_FILE} = '/ssl/certs/xxxxxxxxxx.cabundle';
после копирования файла CA расслоения в ту же папку (там не было ни одного файла расслоения там ранее). Эта папка содержит .crt файл, который уже существовал там после установки сертификата через WHM/Cpanel.)
Я также попытался указать только переменную окружения HTTPS_CA_FILE без переменной HTTPS_CA_PATH, но не повезло. Тем не менее ошибка сохраняется.
Любые идеи о том, что мне может не хватать либо в коде, либо на сервере, чтобы сценарий мог успешно проверить имя хоста? Это выделенный веб-сервер под управлением Linux и cPanel.
Спасибо!
Я считаю, что у вас это есть. Позднее я заметил, что Firefox не понравился SSL-сертификат, хотя Chrome, IE и Safari. FF жаловался на цепочку доверия. Я пытался переустановить сертификат несколько раз с помощью пакета CA Bundle, предоставленного GlobalSign и AlphaSSL, и в конечном итоге передал его моим администраторам на сервере. Они сказали, что просто переустановили сертификат, и теперь ему нравится FF. Я только что вернулся и проверил этот скрипт и установил $ ENV {PERL_LWP_SSL_VERIFY_HOSTNAME} = 1, и теперь он работает отлично. :) – vdawg