2013-10-15 26 views
5

otrzymuję następujący komunikat o błędzie podczas próby nawiązania połączenia z konkretnym stronie https przy użyciu LWP:Instalowanie nowego certyfikatu CA dla Perl 5.14.2 LWP na 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. 

Próbowałem z wget i otrzymała:

ERROR: cannot verify [domain]'s certificate, issued by `/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certificates.godaddy.com/repository/CN=Go Daddy Secure Certification Authority/serialNumber=********': 
    Unable to locally verify the issuer's authority. 

I googled wokół i odkrył, że prawdopodobnie musiałem zainstalować godaddy root ca cert. Zorientowałem się, jak to zrobić (pobierz certyfikaty, umieść/usr/share/ca-certyfikaty i uruchom update-ca-certyfikaty). Nauczyłem się również używać openssl s_client w procesie.

teraz, że certyfikat jest zainstalowany, prace wget, ale LWP nadal nie z tego samego błędu i tak nie 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 

nie mam pojęcia, gdzie iść dalej, aby dostać tę pracę. Jakieś sugestie?


EDIT:SOLVED Oto prosty skrypt, który opisuje, co pracowali po mikew za sugestia:

#!/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); 

Odpowiedz

5

Dla bardziej konkretnej odpowiedzi, to musimy wiedzieć, w jaki sposób są instancji Twój obiekt LWP.

Ale prawdopodobnie musisz wiedzieć, że opcje SSL_ca_file i SSL_ca_path dla ssl_opts w konstruktorze LWP. Bez jednego z tych zestawów zakłada się, że Mozilla_CA jest CA do używania do weryfikowania stron internetowych.

Zobacz LWP::Protocol::https i LWP::UserAgent, ssl_opts opcję konstruktora.

Jeśli używasz czegoś takiego jak lwp-download, a nie tworzysz samodzielnie obiektu LWP :: UserAgent, musisz ustawić zmienną środowiskową PERL_LWP_SSL_CA_FILE, aby wskazała urząd certyfikacji lub ustaw PERL_LWP_SSL_CA_PATH na ścieżkę urzędu certyfikacji. Możesz je po prostu ustawić zamiast przekazywania do ssl_opts.

Jeśli nie są szczególnie zaniepokojeni robi wszystko to weryfikację i jak żyć niebezpiecznie, można ustawić verify_hostname => 0 dla ssl_opts lub ustawić zmienną środowiskową PERL_LWP_VERIFY_HOSTNAME 0.

A jak zauważono w dokumentacji, a LWP 5,837 wcześniej miałem verify_hostname off domyślnie, natomiast nowsze wersje domyślne do niego będąc na

+0

to działało kiedy dodałam tylko SSL_ca_path. Dzięki! –

+0

Dobrze słyszeć! Edytowano odpowiedź, aby wyjaśnić, że potrzebny jest tylko jeden z plików SSL_ca_file lub SSL_ca_path. – mikew

0

Spróbuj tego:

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