В продолжение предыдущей заметки...
Так как кроме получения данных по https со "своими" сертификатами мне эти данные нужно было ещё и обработать, то решил и обработку и получение данных запихнуть в один perl-скрипт. Так как с проблемой "трёх сертификатов в одном файле" разобрался, то не предвидел каких-либо трудностей на этом пути :)
Ну и само собой трудности появились, быстро их решить не удалось, а в инете нагуглилось немалое количество вопросов на эту же тему, но так же без ответов их решающих.
Ошибка:
500 Can't connect to www.nekiysite.ru:443 (SSL connect attempt failed with unknown error error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure)
Так как кроме получения данных по https со "своими" сертификатами мне эти данные нужно было ещё и обработать, то решил и обработку и получение данных запихнуть в один perl-скрипт. Так как с проблемой "трёх сертификатов в одном файле" разобрался, то не предвидел каких-либо трудностей на этом пути :)
Ну и само собой трудности появились, быстро их решить не удалось, а в инете нагуглилось немалое количество вопросов на эту же тему, но так же без ответов их решающих.
Ошибка:
500 Can't connect to www.nekiysite.ru:443 (SSL connect attempt failed with unknown error error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure)
Решение:
обязательно должны быть установлены модули LWP::UserAgent, Net::SSL, IO::Socket::SSL, Net::SSLeay. Net::SSL мы явно прописываем в скрипте, но остальные тоже используются. В моём случае всё как бы работало, и на модули не ругалось, но не хватало Net::SSLeay. После его установки всё заработало как надо. В общем, проверяем наличие этих модулей и при необходимости доустанавливаем их.
Ну и сам вариант скрипта:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use Net::SSL;
$ENV{HTTPS_CA_FILE} = 'serv.pem';
$ENV{HTTPS_CERT_FILE} = 'servcert.pem';
$ENV{HTTPS_KEY_FILE} = 'servkey.pem';
my $ua = LWP::UserAgent->new( ssl_opts => {
verify_hostname => 0,
SSL_version => 'SSLv3',
});
$ua->agent("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
$ua->timeout(5);
my $res = $ua->get('https://www.nekiysite.ru/content.xml');
if ( $res->is_success ) {
...
}
...
Использованы pem-файлы, полученные из одного p12-файла. Из предыдущей заметки.
Лишнее из скрипта убрано, здесь только то, что касается описываемого вопроса.
Теоретически можно передать имена (и пути) к сертификатам в ssl_opts, но у меня не заработало, зато подхватилось из переменных окружения.
Комментариев нет:
Отправить комментарий