2014-07-11 8 views
5

Sto cercando di creare uno script che si colleghi semplicemente a un sito Web. Tuttavia, per qualche motivo non si collegherà a nulla che utilizza HTTPS.Non riesco a connettermi a qualsiasi sito HTTPS utilizzando LWP :: UserAgent

Abbiamo un proxy abilitato qui. Tuttavia, ritengo che il proxy non sia il problema, perché se dovessi connettermi a un HTTPS all'interno della rete che non esegue il tunneling attraverso un proxy, esso continua a fallire.

Se dovessi eseguire questo programma su qualsiasi sito che non utilizza HTTPS, posso passare e lo script funziona come previsto.

Quello che mi chiedo è cosa potrebbe essere possibile bloccando lo script dalla connessione a qualsiasi sito protetto SSL.

Ecco il codice che ho scritto:

$ENV{HTTPS_DEBUG} = 1; 

my $ua = LWP::UserAgent->new(keep_alive => 1); 
$ua->agent('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36'); 
my $pac = HTTP::ProxyPAC->new(URI->new("http://pacfilelocation:8080/pac_file.pac")); 
my $res = $pac->find_proxy("https://www.google.com"); 


if ($res->direct) { 
    print "No Proxy Needed\n"; 
} elsif ($res->proxy) { 
    print "Proxy: " . $res->proxy . "\n"; 
    $ENV{HTTPS_PROXY} = $res->proxy; 
    $ENV{HTTP_PROXY} = $res->proxy; 
    $ua->env_proxy; 
} 

my $req = new HTTP::Request('GET', 'https://www.google.com/'); 
$req->header('Accept' => 'text/html'); 
$req->header('Host', 'www.google.com'); 

my $res2 = $ua->request($req); 

if ($res2->is_success) { 
    print $res2->decoded_content; 
} else { 
    print "Error: " . $res2->status_line . "\n"; 
} 

La caratteristica HTTPS_DEBUG per qualche motivo non l'uscita di debug, che rende questo ancora più difficile da risolvere.

Quando si esegue lo script ottengo un errore generico:

Error: 500 Can't connect to www.google.com:443 

Qualsiasi aiuto sarebbe grande!

risposta

7

Assicurarsi di utilizzare almeno la versione 6.06 di LWP :: UserAgent e la versione 6.06 di LWP :: Protocol :: https. Qualsiasi versione precedente non ha il supporto adeguato per il proxy https, almeno non quando si utilizza IO :: Socket :: SSL come libreria SSL sottostante.

per ottenere le versioni si esegue:

use LWP::UserAgent; 
use LWP::Protocol::https; 
print "LWP::UserAgent: ".LWP::UserAgent->VERSION,"\n"; 
print "LWP::Protocol::https: ".LWP::Protocol::https->VERSION,"\n"; 

Se si usa niente di meno che l'aggiornamento delle versioni richieste. Mentre questo è facile per LWP :: UserAgent, cpan potrebbe non installare la versione più recente di LWP :: Protocol :: https per impostazione predefinita, vedere http://www.nntp.perl.org/group/perl.libwww/2014/05/msg7718.html. In questo caso devi farlo esplicitamente da http://search.cpan.org/~mschilli/LWP-Protocol-https-6.06/.

Se si utilizza un sistema Debian recente o Ubuntu> = 14.04, si avrà comunque la versione 6.04 di LWP :: Protocol :: https, ma questo include già le patch necessarie per il corretto supporto proxy https.

L'altra alternativa sarebbe quella di utilizzare il vecchio back-end Net :: SSL/Crypt :: SSLeay per LWP, ma io consiglio contro di esso, perché non implementa tutti i necessari controlli dei certificati e quindi montando un man-in-the -il primo attacco contro di esso è facile.

+1

Aggiornamento di LWP :: Protocol :: https a 6.06 lavorato. Grazie mille! Nota: ho dovuto installare manualmente 6.06, come cpan usato 6.04 – theEli

Problemi correlati