2008-12-03 6 views
9

Je voudrais savoir s'il est possible de forcer LWP :: UserAgent à accepter un certificat SSL expiré pour un seul serveur bien connu. Le problème est légèrement compliqué par le proxy Squid entre les deux.Puis-je forcer LWP :: UserAgent à accepter un certificat SSL expiré?

Je suis allé aussi loin que de mettre en place un environnement de débogage comme:

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; 

Heureusement, le problème a finalement été résolu sur le serveur distant avant que je puisse venir avec ma propre solution, mais je voudrais pouvoir éventuellement contourner le problème s'il devait survenir de nouveau (le service sous-jacent avait été perturbé pendant plusieurs heures avant que je ne sois appelé à l'action). Je préférerais une solution au niveau LWP :: UserAgent à une solution basée sur les implémentations Crypt :: SSLeay ou openSSL sous-jacentes, si une telle solution existe, puisque je préfère ne pas relâcher la sécurité pour d'autres applications non liées. Bien sûr, je suis toujours à la recherche d'une telle solution, dans mon temps libre copieux.

Répondre

9

Mise à jour à l'adresse commentaire

Pour contourner tous les chèques de certificat vous pouvez définir le agent jusqu'à ne pas vérifier le certificat. L'agent transmet également les paramètres à l'implémentation de socket SSL utilisée. Par exemple, avec IO::Socket::SSL, vous pouvez définir SSL_verify_mode à 0x00.

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

Ceci est parfois cité comme une solution, mais cela ne semble pas fonctionner dans mon cas; Cependant, je n'ai pas eu le temps de le tester intensivement, et je pourrais bien avoir été dans l'erreur. Je prévois de vérifier si cela fonctionne ou non pour moi dans un environnement de test. –

9

Essayez redéfinissant la validation du certificat SSL avec

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

avant de faire la demande https.

Questions connexes