LWP :: UserAgent игнорирует SSL_VERIFY_PEER - PullRequest
2 голосов
/ 25 февраля 2020

Я использую Perl 5.16.3 на RHEL 7, и у меня достаточно общий c запрос:

#!/usr/bin/env perl
use strict;
use warnings;

use LWP::UserAgent() ;
use URI::Escape ;
use IO::Socket::SSL ;

my $PhoneNo = "<Some phone number>" ;
my $SomeMsg = "Some message" ;
my $BaseURL = 'https://api.clickatell.com/http/sendmsg?user=someuser&password=somepassword' ;
my $EncSomeMsg = uri_escape($SomeMsg) ;

my $SendURL = sprintf("%s&to=%s&text=%s",$BaseURL,$PhoneNo,$EncSomeMsg) ;

my $ua = LWP::UserAgent->new(
timeout => 10,
ssl_opts => {
    verify_hostname => 1,
    SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_PEER,
},
) ;

#$ua->ssl_opts(SSL_verify_mode => IO::Socket::SSL::SSL_VERIFY_PEER) ; # Causes error 'Can't locate object method "ssl_opts" via package "LWP::UserAgent"'

my $contents = $ua->get($SendURL) ;

printf("Returned: %s\n",$contents) ;

Однако он по-прежнему возвращает:

Использование по умолчанию SSL_verify_mode SSL_VERIFY_NONE для клиента не рекомендуется! Пожалуйста, установите SSL_verify_mode на SSL_VERIFY_PEER, возможно, с SSL_ca_file | SSL_ca_path для проверки. Если вы действительно не хотите проверять сертификат и держать соединение открытым для атак «Человек-посредник», пожалуйста, явно задайте для SSL_verify_mode значение SSL_VERIFY_NONE в вашем приложении.

Это версии модулей:

  • LWP::UserAgent: 2.033
  • LWP::Protocol::https: (версия не возвращена)
  • IO::Socket::SSL: 1.94

Почему игнорируется мой запрос на подтверждение сверстника?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Согласно в версии 6.00 добавлен журнал изменений LWP :: UserAgent ssl_opts. Вы используете более старую / младшую версию 2.*.

LWP :: UserAgent журнал изменений

6,00 2011-03-08
- [… ] LWP :: UserAgent получил новый метод ssl_opts для управления этим.

0 голосов
/ 28 февраля 2020

Следуя предложению @ AnFi, я запустил yum install "perl(LWP::UserAgent)" (CPAN недоступен через наш брандмауэр) и сообщил, что соответствующий пакет perl-libwww-perl-6.05-2.el7.noarch установлен и обновлен. Глядя на содержимое пакета, я обнаружил, что его нет в системе @INC, поэтому я добавил это в скрипт:

use lib '/usr/share/perl5';

Я также переключился на использование $ua->ssl_opts. Предложение Стеффена Ульриха о получении версий соответствующих компонентов также показало, что LWP::Protocol::https не был установлен, и когда-то он работал нормально, без жалоб.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...