Posso forçar LWP :: UserAgent para aceitar um certificado SSL expirado?
Pergunta
Gostaria de saber se é possível forçar LWP :: UserAgent para aceitar um certificado SSL expirado para um único servidor, bem conhecido. A questão é um pouco complicada pelo proxy Squid no meio.
Eu fui tão longe como para configurar um ambiente de depuração como:
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;
Felizmente, a questão foi finalmente fixas no servidor remoto antes de eu era capaz de chegar a minha própria solução, mas eu gostaria de ser capaz de contornar opcionalmente o problema deveria surgir de novo (o serviço subjacente tinha sido interrompido por vários horas antes fui chamado em ação).
Eu seria a favor de uma solução ao nível LWP :: UserAgent mais de um com base nas subjacentes implementações Crypt :: SSLeay ou OpenSSL, se existe uma solução deste tipo, desde que eu prefiro não relaxar segurança para outras aplicações não relacionadas. É claro que eu ainda estou à procura de uma tal solução mim, no meu tempo livre abundante.
Solução
Atualizado para comentário endereço
Para ignorar todas cheques certificado pode definir o agente até não verificar o certificado.
$agent->ssl_opts(verify_hostname => 0);
O agente também passará configurações para baixo para a implementação de soquete SSL está sendo usado. Por exemplo, com IO::Socket::SSL
você pode definir SSL_verify_mode
para 0x00
.
$agent->ssl_opts(SSL_verify_mode => 0x00);
Outras dicas
Tente substituir o certificado SSL de validação com
$agent->ssl_opts(verify_hostname => 0,
SSL_verify_mode => 0x00);
antes de fazer o pedido https.