2013-08-15 16 views
6

Ich bin mit dem folgenden Perl-Snippet auf Debian mit Perl v5.14.2 und libwww-perl v6.04-1LWP weigert über HTTPS

my $ua = LWP::UserAgent->new; 
my $req = HTTP::Request->new("GET", "https://google.com/"); 
my $rep = $ua->request($req); 
print $rep->status_line; 

Diese sofort zurück „500 kann keine Verbindung zu verbinden google.com:443 ". Ich habe versucht, LWP::Simple, Net::SSLeay, Crypt::SSLeay usw. ohne Erfolg zu verwenden.

Seltsamerweise funktioniert der gleiche Code auf einem anderen Debian-System, das genau die gleichen Perl- und LWP-Versionen ausführt.

Also dachte ich, es gibt einen Fehler mit dem zugrunde liegenden System, aber andere Anwendungen - wie cURL für jeden Browser - funktionieren gut.

Auch openssl s_client -connect google.com:443 liefert Verify return code: 20 (unable to get local issuer certificate) auf beide Systeme.

Hat jemals jemand dieses Phänomen getroffen und hat eine Lösung?

+0

Sind beide Debian im selben Netzwerk? –

+0

Nein. Ich habe das mit mehreren Systemen in verschiedenen Netzwerken versucht, auch mit Nicht-Debian und anderen Perl-Versionen. Es scheint, dass es ein Problem mit dem ersten System gibt. – Tomas

+2

versuchen Sie 'wget https: // google.com /' um sicherzustellen, dass das Netzwerk den Datenverkehr nicht blockiert –

Antwort

7

Statt dessen:

$ua = LWP::UserAgent->new; 

Versuchen Sie, diese zu nutzen:

$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); 
+0

Vielen Dank für Ihre Antwort, aber wie ich in der Frage und den Kommentaren bemerkte "Einstellung Verify_hostname auf Null macht keinen Unterschied". Es kann im allgemeinen Fall helfen, aber nicht in diesem spezifischen, der unterschiedlich gelöst wurde, wie Sie beobachten können, wenn Sie die Diskussion in den Kommentaren lesen. – Tomas

+0

Das hat für mich funktioniert. Warum? Ich verwende IIS6. –

1

FYI für andere kämpfen LWP 500 erors:

Einige LWP 500 Fehler werden offenbar verursacht durch eine andere Art von SSL-Problem (das mit der Einstellung verify_hostname nicht behoben wird). Stattdessen kommuniziert LWP möglicherweise mit dem HTTPS-Server, aber die Antwort ist nicht das, was LWP erwartet. In meinem Fall war die Lösung SSLv3 zu zwingen, mit folgenden Mitteln:

my %ssl_options = (SSL_version => 'SSLv3'); 
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options), 

auch für jeden, der versucht, herauszufinden, was für 500 Fehler, den Sie bekommen, Ausgang dieses zusammen mit Ihrem Fehler:

print $response->as_string; 

Für mein Problem (gelöst durch SSLv3 Einstellung), meine $ response-> as_string Ausgabe enthalten:

"SSL-Routinen: SSL23_GET_SERVER_HELLO: SSLv3 Alarm unerwartete Nachricht LWP"

Ich werde auch sagen, dass mein Code jahrelang auf einer früheren Version von Ubuntu lief. Dieses Problem trat erst auf, nachdem ich Ubuntu aktualisiert hatte. Ich bin zu dem Schluss gekommen, dass es wahrscheinlich mehrere Möglichkeiten gibt, wie sich neuere Versionen von LWP von älteren unterscheiden, also seien Sie vorsichtig!

Viel Glück beim Lösen Ihres LWP-Problems!

1

Ich hatte dieses Problem unter Windows Server 2003 mit Strawberry Perl. Der Fehler 500 war ein Problem mit IO::Socket::IP.

Durch Ausführen einer Neuinstallation des Moduls (cpan, Erzwingen der Installation IO::Socket::IP) wurde das Problem behoben.