Question

Je voudrais savoir s'il est possible de forcer LWP :: UserAgent à accepter un certificat SSL expiré pour un seul serveur connu. La question est légèrement compliquée par le proxy Squid entre les deux.

Je suis allé jusqu'à mettre en place un environnement de débogage tel que:

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 proposer ma propre solution, mais j'aimerais pouvoir éventuellement contourner le problème s'il devait se reproduire (le service sous-jacent avait été interrompu plusieurs fois). heures avant mon appel à l'action).

Je préférerais une solution au niveau LWP :: UserAgent à une solution basée sur les implémentations sous-jacentes de Crypt :: SSLeay ou openSSL, si une telle solution existe, car je préfère ne pas assouplir la sécurité pour des applications sans rapport. Bien sûr, je suis toujours à la recherche d’une telle solution, dans mon temps libre copieux.

Était-ce utile?

La solution

Mis à jour pour répondre au commentaire

Pour ignorer toutes toutes les vérifications de certificats, vous pouvez définir le agent jusqu'à ne pas vérifier le certificat.

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

L'agent transmettra également les paramètres à l'implémentation du socket SSL utilisée. Par exemple, avec IO :: Socket :: SSL , vous pouvez définir SSL_verify_mode sur 0x00 .

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

Autres conseils

Essayez de remplacer la validation du certificat SSL avec

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

avant de faire la demande https.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top