【问题标题】:LWP / IO::Socket::SSL fails with SSL3_GET_SERVER_HELLO:wrong cipher returnedLWP / IO::Socket::SSL 失败并返回 SSL3_GET_SERVER_HELLO:wrong cipher
【发布时间】:2016-03-14 14:03:36
【问题描述】:

我发现许多问题与我的问题非常相似,但他们没有解决,所以我在这里寻求您的帮助。

我正在尝试使用 https 使用 Perl LWP 从网页获取数据。 我几乎可以从我尝试过的每个站点获取数据,除了我真正需要使用的站点。 我在 Windows x64 下使用 Perl 版本 v5.18.2。 这是我的基本虚拟示例:

use strict;
use LWP::UserAgent;
use HTTP::Request;
use IO::Socket::SSL qw(debug3);
my $ua = LWP::UserAgent->new;
my $url = 'https://www.domainx.com:443';
my $req = HTTP::Request->new( GET => $url);
my $response = $ua->request($req);
print $response->status_line . "\n";

response->status_line 的结果: 500 Can't connect to www.domainx.com:443

SSL 调试:

DEBUG: .../IO/Socket/SSL.pm:1890: new ctx 48125200
DEBUG: .../IO/Socket/SSL.pm:393: socket not yet connected
DEBUG: .../IO/Socket/SSL.pm:395: socket connected
DEBUG: .../IO/Socket/SSL.pm:413: ssl handshake not started
DEBUG: .../IO/Socket/SSL.pm:443: using SNI with hostname www.domainx.com
DEBUG: .../IO/Socket/SSL.pm:466: set socket to non-blocking to enforce     timeout=180
DEBUG: .../IO/Socket/SSL.pm:479: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:489: ssl handshake in progress
DEBUG: .../IO/Socket/SSL.pm:499: waiting for fd to become ready: SSL wants a read first
DEBUG: .../IO/Socket/SSL.pm:519: socket ready, retrying connect
DEBUG: .../IO/Socket/SSL.pm:479: Net::SSLeay::connect -> -1
DEBUG: .../IO/Socket/SSL.pm:1359: SSL connect attempt failed with unknown error
DEBUG: .../IO/Socket/SSL.pm:485: fatal SSL error: SSL connect attempt failed with unknown error error:14092105:SSL routines:SSL3_GET_SERVER_HELLO:wrong cipher returned
DEBUG: .../IO/Socket/SSL.pm:1924: free ctx 48125200 open=48125200
DEBUG: .../IO/Socket/SSL.pm:1932: OK free ctx 48125200

通过查看之前的帖子,我尝试申请:ssl_opts => { verify_hostname => 0 },但这没有帮助。 如果我尝试使用浏览器(IE 或 Chrome)连接到同一个站点,它就可以正常工作。

这是一些基于证书的错误还是这里出了什么问题?

【问题讨论】:

  • 这是一个握手错误,不能通过禁用证书验证来修复。如果您提供真实的目标主机名以及 IO::Socket::SSL 的版本以及您正在使用的底层 openssl,我会很有帮助。
  • 实际站点为 www.firstcard.fi 并封装 IO::Socket::SSL; - 我们的 $VERSION = '1.962';稍后我将不得不检查 openssl -version

标签: windows perl ssl lwp


【解决方案1】:

实际站点是www.firstcard.fi

report by SSLLabs 也可以看出,服务器严重损坏。要获得与服务器的连接,必须仅使用服务器提供的单一良好密码来解决这些问题:

my $ua = LWP::UserAgent->new;
$ua->ssl_opts(SSL_cipher_list => 'DES-CBC3-SHA');

有趣的是,这个密码包含在 IO::Socket::SSL 中默认使用的密码列表中,但是服务器太坏了,无法正确处理正确的 ClientHello。

【讨论】:

  • 嗨。这似乎有效。非常感谢 !!您是如何找到正确密码的?
  • 这可以从我链接到的 SSLLabs 报告中看到。但最后我有各种工具来测试网站(openssl s_client,github.com/noxxi/p5-ssl-tools/blob/master/analyze-ssl.pl),并且我有其他损坏网站的经验。
  • 再次感谢您。
猜你喜欢
  • 2020-09-14
  • 2019-01-08
  • 2016-03-31
  • 2011-02-21
  • 2018-12-09
  • 2015-12-11
  • 1970-01-01
  • 2020-12-21
  • 2023-04-05
相关资源
最近更新 更多