Kann ich zwingen LWP :: Useragent ein abgelaufenes SSL-Zertifikat zu akzeptieren?
Frage
Ich möchte wissen, ob es möglich ist LWP :: Useragent zu zwingen, ein abgelaufenes SSL-Zertifikat für einen einzelnen, bekannten Server zu akzeptieren. Das Problem wird durch die Squid-Proxy etwas kompliziert dazwischen.
Ich ging so weit, eine Debugging-Umgebung wie einzurichten:
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;
Zum Glück das Problem schließlich auf dem Remote-Server festgelegt wurde, bevor ich in der Lage war, mit meiner eigenen Lösung zu kommen, aber ich möchte das Problem gegebenenfalls in der Lage umgehen sollte es wieder entstehen (der zugrunde liegende Dienst seit mehreren gestört Stunden, bevor ich in der Tat genannt).
Ich würde eine Lösung auf der LWP :: Useragent-Ebene über einen Gefallen auf der Basis der zugrunde liegenden Crypt :: SSLeay oder openSSL Implementierungen, wenn eine solche Lösung existiert, da ich es vorziehen, nicht die Sicherheit für andere, nicht verwandte Anwendungen zu entspannen. Natürlich bin immer noch ich selbst für eine solche Lösung suchen, in meinem reichlich freie Zeit.
Lösung
Aktualisiert Kommentar Adresse
So umgehen Sie alle Zertifikatsprüfungen Sie können die Agent bis das Zertifikat nicht überprüfen.
$agent->ssl_opts(verify_hostname => 0);
Der Agent wird auch Einstellungen bis auf die SSL-Socket-Implementierung übergeben verwendet werden. Zum Beispiel mit IO::Socket::SSL
Sie können SSL_verify_mode
auf 0x00
gesetzt.
$agent->ssl_opts(SSL_verify_mode => 0x00);
Andere Tipps
Versuchen Sie, die SSL-Zertifikat-Validierung überschrieben mit
$agent->ssl_opts(verify_hostname => 0,
SSL_verify_mode => 0x00);
, bevor Sie tun, um die HTTPS-Anfrage.