¿Puedo obligar a LWP :: UserAgent a aceptar un certificado SSL caducado?
Pregunta
Me gustaría saber si es posible forzar a LWP :: UserAgent a aceptar un certificado SSL caducado para un único servidor conocido. El problema es un poco complicado por el proxy Squid en el medio.
Fui tan lejos como para configurar un entorno de depuración 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;
Afortunadamente, el problema finalmente se solucionó en el servidor remoto antes de que se me ocurriera mi propia solución, pero me gustaría poder eludir el problema si surgiera nuevamente (el servicio subyacente se había interrumpido por varios horas antes de que me llamaran a la acción).
Preferiría una solución en el nivel LWP :: UserAgent sobre una basada en las implementaciones subyacentes de Crypt :: SSLeay o openSSL, si existe tal solución, ya que prefiero no relajar la seguridad para otras aplicaciones no relacionadas. Por supuesto, todavía estoy buscando esa solución, en mi abundante tiempo libre.
Solución
Actualizado al comentario de dirección
Para omitir todas las comprobaciones de certificados, puede configurar agente para no verificar el certificado.
$agent->ssl_opts(verify_hostname => 0);
El agente también pasará la configuración a la implementación del socket SSL que se esté utilizando. Por ejemplo, con IO :: Socket :: SSL
puede establecer SSL_verify_mode
en 0x00
.
$agent->ssl_opts(SSL_verify_mode => 0x00);
Otros consejos
Intente anular la validación del certificado SSL con
$agent->ssl_opts(verify_hostname => 0,
SSL_verify_mode => 0x00);
antes de hacer la solicitud https.