2015-08-14 48 views
0

Perl version is = v5.12.4Perl的用戶代理將無法連接到服務器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); 
    # .... 

的HTTP代碼始終是500,我得到的錯誤信息 -

"Can't connect to 10.0.0.1:443".

我曾嘗試過各種SSL_versions串tlsv12,tslv1。 2,TSLv1,TLSv12,TLS等無濟於事。我知道服務器期望TLS 1.2。通過curl進行的相同HTTP調用工作正常。

額外的調試輸出..

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 

請幫幫忙! -Eddie

+1

500是服務器端代碼。你看過網絡服務器錯誤日誌中的內容嗎? –

+1

@MarcB:LWP在錯誤中自行生成這樣的500個代碼,以將錯誤打包成有效的HTTP響應。 –

+0

哼.... LWP消息通常更長。 – ikegami

回答

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) 

這看起來像服務器不喜歡客戶端作爲SSL握手發送的內容,因此服務器關閉了連接。爲什麼服務器這樣做並不明確,但您可能會在服務器端找到錯誤消息。

Same HTTP call through curl works fine.

如果這真的是一個HTTP調用(即無HTTPS)你的捲曲程度超過你的問題做的是,服務器期望HTTP W/O SSL但LWP代碼使用帶有SSL的HTTP(HTTPS)。但是,如果使用curl的HTTPS調用成功,那麼可以通過使用curl成功調用數據包來捕獲數據包,並使用LWP不成功調試問題並比較握手。

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

隨着IO ::插座:: SSL它將接受TLSv12和TLSv1_2爲TLS 1.2,並使用TLSv1爲TLS 1 *的最新版本,不區分大小寫。僅指定「TLS」將導致IO :: Socket :: SSL嘎嘎聲。老版本的IO :: Socket :: SSL(2012之前的版本1.70之前)忽略了無效設置。另請參閱描述設置的文檔。

相關問題