2015-08-14 1 views
0

Perl version is = v5.12.4Perl UserAgent ne se connecte pas au serveur TLS1.2

LWP::UserAgent->VERSION = 6.03

#.... 
    # Setup HTTP request 
    my $req = HTTP::Request->new(); 
    $req->method($cmd); 
    $req->uri($uri); 
    $req->header('content-type' => 'application/json'); 
    $req->header('Accept' => 'application/json'); 

    # Setup the call 
    my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, 
               SSL_version => 'tlsv12' }); 
    $ua->timeout(60); 

    # Do the call 
    my $resp = $ua->request($req); 
    # .... 

Le code http est toujours 500 et je reçois le message d'erreur -

"Can't connect to 10.0.0.1:443".

J'ai essayé différentes cordes de ssl_versions tlsv12, tslv1. 2, TSLv1, TLSv12, TLS, etc. en vain. Je sais que le serveur attend TLS 1.2. Le même appel HTTP via curl fonctionne bien.

La sortie de débogage supplémentaires ..

Perl -MIO::Socket::SSL=debug4 powervc_cli.pl -O 
DEBUG: .../IO/Socket/SSL.pm:193: set domain to 2 
DEBUG: .../IO/Socket/SSL.pm:1545: new ctx 140528264056208 
DEBUG: .../IO/Socket/SSL.pm:334: socket not yet connected 
DEBUG: .../IO/Socket/SSL.pm:336: socket connected 
DEBUG: .../IO/Socket/SSL.pm:349: ssl handshake not started 
DEBUG: .../IO/Socket/SSL.pm:379: set socket to non-blocking to enforce timeout=60 
DEBUG: .../IO/Socket/SSL.pm:392: Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:402: ssl handshake in progress 
DEBUG: .../IO/Socket/SSL.pm:412: waiting for fd to become ready: SSL wants a read first 
DEBUG: .../IO/Socket/SSL.pm:432: socket ready, retrying connect 
DEBUG: .../IO/Socket/SSL.pm:392: Net::SSLeay::connect -> 0 
DEBUG: .../IO/Socket/SSL.pm:440: connection failed - connect returned 0 
DEBUG: .../IO/Socket/SSL.pm:1276: SSL connect attempt failed because of handshake problemserror:00000000:lib(0):func(0):reason(0) 

DEBUG: .../IO/Socket/SSL.pm:1276: IO::Socket::INET6 configuration failederror:00000000:lib(0):func(0):reason(0) 

DEBUG: .../IO/Socket/SSL.pm:1582: free ctx 140528264056208 open=140528264056208 
DEBUG: .../IO/Socket/SSL.pm:1590: OK free ctx 140528264056208 

S'il vous plaît aider! -Eddie

+1

500 est un code côté serveur. avez-vous regardé ce qui est dans le journal des erreurs du serveur Web? –

+1

@MarcB: LWP génère par lui-même 500 codes sur les erreurs pour placer l'erreur dans une réponse HTTP valide. –

+0

hum .... Les messages LWP sont généralement plus longs. – ikegami

Répondre

2
DEBUG: .../IO/Socket/SSL.pm:392: Net::SSLeay::connect -> 0 
DEBUG: .../IO/Socket/SSL.pm:440: connection failed - connect returned 0 
DEBUG: .../IO/Socket/SSL.pm:1276: SSL connect attempt failed because of handshake problemserror:00000000:lib(0):func(0):reason(0) 

Cela ressemble le serveur n'a pas aimé ce que le client a envoyé comme la poignée de main SSL et donc le serveur a fermé la connexion. Pourquoi le serveur a-t-il fait ceci n'est pas clair mais vous pourriez trouver des messages d'erreur du côté du serveur.

Same HTTP call through curl works fine.

Si cela est vraiment un appel HTTP (pas HTTPS) que vous faites avec boucle que votre problème est que le serveur attend HTTP w/o SSL, mais votre code avec LWP utilise le protocole HTTP avec SSL (HTTPS). Mais si un appel HTTPS avec curl réussit alors vous pouvez déboguer le problème en faisant des captures de paquets de l'appel réussi avec curl et les échecs avec LWP et comparer les poignées de main.

I have tried various SSL_versions string tlsv12, tslv1.2, TSLv1, TLSv12, TLS, etc. to no avail.

Avec les versions actuelles de IO :: Socket SSL de il acceptera TLSv12 et TLSv1_2 pour TLS 1.2 et TLSv1 pour TLS 1. *, le cas n'a pas d'importance. Spécifier uniquement "TLS" provoquera IO :: Socket :: SSL à croasser. Les anciennes versions de IO :: Socket :: SSL (antérieures à la version 1.70 de 2012) ignoraient simplement les paramètres invalides. Voir aussi la documentation qui décrit les paramètres.