2008-12-03 4 views
9

Я хотел бы знать, можно ли принудительно заставить LWP :: UserAgent принять сертификат с истекшим сроком действия SSL для одного хорошо известного сервера. Проблема немного усложняется прокси-сервером Squid между ними.Могу ли я заставить LWP :: UserAgent принять истекший сертификат SSL?

я дошел до того, чтобы настроить среду отладки, как:

use warnings; 
use strict; 
use Carp; 
use LWP::UserAgent; 
use LWP::Debug qw(+); 
use HTTP::Cookies; 

my $proxy = 'http://proxy.example.net:8118'; 
my $cookie_jar = HTTP::Cookies->new(file => 'cookies.tmp'); 
my $agent = LWP::UserAgent->new; 
$agent->proxy([ 'http' ], $proxy); 
$agent->cookie_jar($cookie_jar); 

$ENV{HTTPS_PROXY} = $proxy; 
$ENV{HTTPS_DEBUG} = 1; 
$ENV{HTTPS_VERSION} = 3; 
$ENV{HTTPS_CA_DIR} = '/etc/ssl/certs'; 
$ENV{HTTPS_CA_FILE} = '/etc/ssl/certs/ca-certificates.crt'; 

$agent->get('https://www.example.com/'); 

exit; 

К счастью, проблема была в конечном счете, зафиксированной на удаленном сервере, прежде чем я смог придумать мое собственное решение, но я хотел бы чтобы иметь возможность дополнительно обходить проблему, если она возникнет снова (основная служба была нарушена в течение нескольких часов, прежде чем я был призван в действие).

Я бы предпочел решение на уровне LWP :: UserAgent выше одного на основе базовых реализаций Crypt :: SSLeay или openSSL, если такое решение существует, поскольку я предпочитаю не ослаблять безопасность для других несвязанных приложений. Конечно, я все еще ищу такое решение самостоятельно, в свое обильное свободное время.

ответ

9

Обновлен адрес комментария

Чтобы обойти все проверки сертификата вы можете установить agent до не проверить сертификат.

$agent->ssl_opts(verify_hostname => 0); 

Агент также передаст настройки до используемой реализации SSL-сокета. Например, с IO::Socket::SSL вы можете установить SSL_verify_mode в 0x00.

$agent->ssl_opts(SSL_verify_mode => 0x00); 
+1

Это иногда цитируется как решение, но оно, похоже, не работает в моем случае; У меня не было времени, чтобы проверить его широко, хотя, и я вполне мог ошибаться. Я планирую проверить, работает это или нет для меня в тестовой среде. – 2008-12-09 08:28:22

9

Попробуйте перекрывая проверку сертификата SSL с

$agent->ssl_opts(verify_hostname => 0, 
       SSL_verify_mode => 0x00); 

, прежде чем сделать запрос по протоколу HTTPS.