Как принять самозаверяющие сертификаты с LWP::UserAgent

Чтобы заставить LWP::UserAgent игнорировать сертификат сервера, используйте следующую конфигурацию:

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(
    SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_NONE, 
    verify_hostname => 0
);

Типичный ответ на такой вопрос-отключить проверку сертификата вообще. Но это совершенно небезопасно и по существу отключает большую часть защиты, предлагаемой HTTPS. Если проверка полностью отключена, человек в середине атакующего просто может использовать произвольный сертификат, чтобы перехватить соединение и обнюхать и изменить данные. Таким образом, не делайте этого.

Правильный способ работы с такими сертификатами-добавить эти сертификаты как доверенные. Это можно сделать с аргументом SSL_ca_file :

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(SSL_ca_file => 'rootCA.pem');
$ua->get('https://127.0.0.1:8080');

Явно доверяя самозаверяющему сертификату сервера как CA, он больше не будет выдавать "certificate verify failed".

Но, если Ваш сертификат сервера фактически не выдан на "127.0.0.1", теперь вы получите" проверка имени хоста не удалась", поскольку субъект сертификата не соответствует домену URL. Это можно исправить, установив ожидаемое имя хоста:

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(
    SSL_ca_file => 'rootCA.pem',
    SSL_verifycn_name => 'www.example.com',
);
$ua->get('https://127.0.0.1:8080');

Обратите внимание, что SSL_ca_file должен самостоятельно подписанный сертификат, чтобы иметь флаг CA значение true, т. е. что сертификат является сертификатом CA, который может быть использован для выдачи других сертификатов. Если это не так с вашим сертификатом или если вы просто хотите принять конкретный сертификат, независимо от того, истек ли он, отозван, не соответствует имени хоста и т. д., Вы можете выполнить проверку с помощью отпечатка пальца сертификата.

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(SSL_fingerprint => 'sha1$9AA5CFED857445259D90FE1B56B9F003C0187BFF');
$ua->get('https://127.0.0.1:8080');

Отпечаток пальца здесь тот же , что и с openssl x509 -noout -in rootCA.pem -fingerprint -sha1, только алгоритм добавлен спереди ( sha1$... ) и двоеточия удалены.

 

 

<< Назад

Наверх