Задать вопрос
OlegTar
@OlegTar
программист .NET, Javascript, Perl

perl: LWP и https

Пытаюсь отправить POST запрос на сервер по https с помощью LWP.

Вот код:
#!/usr/bin/perl
use LWP::UserAgent;
use LWP::Debug qw(+);
use IO::Socket::SSL qw(debug3);
my $ua = LWP::UserAgent->new;
$ua->agent("MyApp/0.1 ");
$ua->ssl_opts(
SSL_ca_file => '/home/newdeveloper/certs/ca-crt.pem',
);
my $req = HTTP::Request->new(POST => 'www.server/path');

$req->content_type('application/x-www-form-urlencoded');
$req->content('query=libwww-perl&mode=dist');
my $res = $ua->request($req);
print $res->headers_as_string;

# Check the outcome of the response
if ($res->is_success) {
print $res->content;
}
else {
print $res->status_line, "\nerror\n";
}


Вот результат:
DEBUG: .../IO/Socket/SSL.pm:1482: new ctx 460343328
DEBUG: .../IO/Socket/SSL.pm:334: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:336: socket connected
DEBUG: .../IO/Socket/SSL.pm:349: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:1470: ok=0 cert=460964448
DEBUG: .../IO/Socket/SSL.pm:392: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:1213: SSL connect attempt failed with unknown errorerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

DEBUG: .../IO/Socket/SSL.pm:398: fatal SSL error: SSL connect attempt failed with unknown errorerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
DEBUG: .../IO/Socket/SSL.pm:1213: IO::Socket::INET configuration failederror:00000000:lib(0):func(0):reason(0)

DEBUG: .../IO/Socket/SSL.pm:1519: free ctx 460343328 open=460343328
DEBUG: .../IO/Socket/SSL.pm:1524: free ctx 460343328 callback
DEBUG: .../IO/Socket/SSL.pm:1527: OK free ctx 460343328
Content-Type: text/plain
Client-Date: Mon, 16 Jan 2012 15:53:41 GMT
Client-Warning: Internal response
500 Can't connect to server:443 (certificate verify failed)
error

Сертификат на server самоподписной.
решение
$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
не подходит.

нужно проверять сертификат у себя локально.

в строку
SSL_ca_file => '/home/newdeveloper/certs/ca-crt.pem',
я подставлял сертификат сервера, потом pem файл сертфиката, ничего не помогает.

в чём проблема? уже долго бьюсь.
  • Вопрос задан
  • 5592 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
perl_demon
@perl_demon
Пробовали подсунуть сертификат в браузер?
Ответ написан
@skovpen

$ENV{HTTPS_CA_FILE} = "/path/to/your/ca/file/ca-bundle";
$ENV{HTTPS_DEBUG} = 1;

покажи

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы