2008-12-03 19 views
9

Me gustaría saber si es posible forzar a LWP :: UserAgent a aceptar un certificado SSL caducado para un servidor único y conocido. El problema es un poco complicado por el proxy Squid en el medio.¿Puedo forzar a LWP :: UserAgent a aceptar un certificado SSL caducado?

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 fue finalmente fijado en el servidor remoto antes de que yo era capaz de llegar a mi propia solución, pero me gustaría para poder sortear el problema de manera opcional si surgiera nuevamente (el servicio subyacente se había interrumpido durante varias horas antes de que me llamaran a la acción).

Preferiría una solución en el nivel de LWP :: UserAgent sobre una basada en las implementaciones Crypt :: SSLeay o openSSL subyacentes, si existe tal solución, ya que prefiero no relajar la seguridad para otras aplicaciones no relacionadas. Por supuesto, todavía estoy buscando una solución así, en mi copioso tiempo libre.

Respuesta

9

Actualizado al comentario dirección de

Para omitir todos los verificaciones de certificado se puede establecer el agent hasta no verificar el certificado.

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

El agente también pasará ajustes a la aplicación socket SSL que se utiliza. Por ejemplo, con IO::Socket::SSL puede establecer SSL_verify_mode en 0x00.

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

Esto a veces se cita como una solución, pero no pareció funcionar en mi caso; Sin embargo, no tuve tiempo de probarlo exhaustivamente, y podría haber estado equivocado. Planeo verificar si esto funciona o no para mí en un entorno de prueba. –

9

Trate anulando la validación de certificados SSL con

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

antes de hacer la solicitud HTTPS.

Cuestiones relacionadas