2013-10-15 4 views
5

ich die folgende Störung zu erhalten versuchen, auf eine bestimmte https Website verbinden LWP mit:Installieren eines neuen CA-Zertifikat für Perl 5.14.2 LWP auf Ubuntu 12.04

LWP::Protocol::https::Socket: SSL connect attempt failed with unknown errorerror:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl/5.14.2/LWP/Protocol/http.pm line 51. 

ich mit wget versucht und bekam:

Ich googelte herum und entdeckte, dass ich wahrscheinlich das godaddy root ca cert installieren musste. Ich habe herausgefunden, wie das geht (Zertifikate herunterladen,/usr/share/ca-certificates eingeben und update-ca-certificates ausführen). Ich habe auch gelernt, wie man openssl s_client in diesem Prozess benutzt.

Nun, da das Zertifikat installiert ist, wget funktioniert, aber LWP immer noch nicht mit dem gleichen Fehler und so auch OpenSSL s_client:

# openssl s_client -connect [domain]:443 
CONNECTED(00000003) 
depth=0 O = [domain], OU = Domain Control Validated, CN = [domain] 
verify error:num=20:unable to get local issuer certificate 
verify return:1 
depth=0 O = [domain], OU = Domain Control Validated, CN = [domain] 
verify error:num=27:certificate not trusted 
verify return:1 
depth=0 O = [domain], OU = Domain Control Validated, CN = [domain] 
verify error:num=21:unable to verify the first certificate 
verify return:1 

Ich habe keine Ahnung, wohin geht diese Funktion zu erhalten. Irgendwelche Vorschläge?


EDIT:GELÖST Hier ist ein einfaches Skript, das, was nach dem MikeW Vorschlag beschreibt gearbeitet:

#!/usr/bin/perl 
use LWP::UserAgent; 
$URL="[domain]"; 
my $ua = LWP::UserAgent->new(ssl_opts => { SSL_ca_path=>'/etc/ssl/certs'}); 
my $response = $ua->get($URL); 

Antwort

5

Für eine konkrete Antwort, wir würden müssen wissen, wie Sie Instanziieren Ihr LWP-Objekt.

Aber was Sie wahrscheinlich wissen müssen, ist die SSL_ca_file und SSL_ca_path Optionen für ssl_opts im LWP-Konstruktor. Ohne eines dieser Sets wird davon ausgegangen, dass Mozilla_CA die Zertifizierungsstelle ist, die zur Überprüfung von Websites verwendet werden kann.

Siehe LWP::Protocol::https Und LWP::UserAgent, ssl_opts Konstruktoroption.

Wenn Sie so etwas wie lwp-Download verwenden und nicht wirklich die LWP Instanziieren :: Objekt selbst User-Agent, dann müssen Sie die PERL_LWP_SSL_CA_FILE Umgebungsvariable auf Ihre Zertifizierungsstelle verweisen oder PERL_LWP_SSL_CA_PATH auf Ihren CA Pfad festgelegt. Sie können diese auch setzen, anstatt sie an ssl_opts weiterzuleiten.

Wenn Sie nicht besonders besorgt über all diese Überprüfung zu tun und gefährlich leben möchten, können Sie verify_hostname => 0 für ssl_opts eingestellt oder PERL_LWP_VERIFY_HOSTNAME Umgebungsvariable auf 0 gesetzt

Und wie in der Dokumentation angegeben, LWP 5.837 und früher hatte verify_hostname standardmäßig deaktiviert, während spätere Versionen standardmäßig auf

+0

das funktionierte, wenn ich nur die SSL_ca_path hinzugefügt. Vielen Dank! –

+0

Gut zu hören! Bearbeitete Antwort um klarzustellen, dass nur eine von SSL_ca_file oder SSL_ca_path benötigt wird. – mikew

0

Versuchen sie, diese zu sein:

use LWP::UserAgent; 
use IO::Socket::SSL; 
my $ua = LWP::UserAgent->new(ssl_opts => { SSL_verify_mode => 'SSL_VERIFY_NONE'},); 
Verwandte Themen