我正在尝试使用Perl的WWW :: Mechanize安全登录我的ebay帐户。
my $m = new WWW::Mechanize(agent => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16',
ssl_opts =>
{
SSL_version => 'SSLv3',
SSL_ca_path => '/etc/ssl/certs',
verify_hostname => 1,
});
$m->get("https://m.ebay.de/signin");
$m->form_with_fields('userName', 'pass');
$m->field('userName', $user);
$m->field('pass', $pass);
$m->submit_form();
我事先添加了一个处理程序,以查看从服务器获取的实际HTTP响应。
$m->add_handler("response_done", sub { shift->dump; return });
这是提交表单后返回的内容:
HTTP/1.1 302 Found
Date: Wed, 05 Feb 2014 13:11:33 GMT
Location: https://m.ebay.de/signin
Server: eBay Server
Content-Length: 0
Client-Date: Wed, 05 Feb 2014 13:11:34 GMT
Client-Peer: 66.135.213.196:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
Client-SSL-Cert-Subject: /C=US/ST=California/L=San Jose/O=eBay Inc./OU=Site Operations/CN=m.ebay.com
Client-SSL-Cipher: RC4-MD5
Client-SSL-Warning: Peer certificate not verified
RlogId: t6nrce9%3Fvo%7B%3Dd70f%2B2250-144022ccc1b-0x91
Set-Cookie: dp1=bu1p/QEBfX0BAX19AQA**54d36c06^;Domain=.ebay.de;Expires=Fri, 05-Feb-2016 13:11:34 GMT;Path=/
Set-Cookie: s=CgAD4ACBS84oGMDIyY2M4NzQxNDQwYTYyMGY1ZjdhMzM1ZmZmZmEwZWS3nFsy;Domain=.ebay.de;Path=/; HttpOnly
Set-Cookie: nonsession=CgADLAAFS8j+OMgDKACBcWDoGMDIyY2M4NzQxNDQwYTYyMGY1ZjdhMzM1ZmZmZmEwZWTqBmVA; Domain=.ebay.de;Expires=Thu, 05-Feb-2015 13:11:34 GMT;Path=/
X-EBAY-C-REQUEST-ID: 022ccc0b1440a2a8e48d914affffffff
那为什么我会收到这个警告? Client-SSL-Warning:未验证对等证书
我从服务器获取的HTTP 302将我重定向回登录页面,服务器没有将我登录到ebay。
我打开了Wireshak,看看SSL级别上发生了什么。 SSL握手进展顺利,但在此之后,服务器,服务器发送了一些应用程序数据 发给我一个 加密警报21 - “解密失败”
为什么我会收到此加密警报,它是什么意思以及服务器不喜欢什么? 非常感谢你。
答案 0 :(得分:2)
看起来您将最新版本的libwww-perl(LWP :: UserAgent)与旧版libwww-perl中的LWP :: Protocol :: https结合使用。当前版本的LWP :: Protocol :: https添加了Client-SSL-Socket-Class标头,它不在您的输出中。这些旧版本首选Crypt :: SSLeay / Net :: SSL,较新版本使用IO :: Socket :: SSL作为SSL后端。但是Crypt :: SSLeay不使用SSL_ca_path设置,而是由环境变量控制。它没有正确的主机名验证等。
要清理乱七八糟的东西,您可能会尝试安装更新版本的LWP :: Protocol :: https。在过去,它与libwww-perl捆绑在一起,但现在它是一个单独的模块,它解释了你是如何来到这个混乱的(例如只升级libwww-perl工作)。我还建议升级到更新版本的IO :: Socket :: SSL,因为你使用的版本也相当陈旧(近4年),同时添加了许多功能和修复。
要检查您的安装是否正确:
"perl -MLWP::Protocol::https -e 'print $LWP::Protocol::https::VERSION'"
应该给你一个6.04的版本。
答案 1 :(得分:0)
我运行代码并获取:
HTTP/1.1 200 OK
Cache-Control: no-store, no-cache
Date: Wed, 05 Feb 2014 17:09:16 GMT
Pragma: no-cache
Server: eBay Server
Content-Encoding: gzip
Content-Language: en-US
Content-Type: text/html;charset=utf-8
Client-Date: Wed, 05 Feb 2014 17:09:16 GMT
Client-Peer: 66.135.213.196:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
Client-SSL-Cert-Subject: /C=US/ST=California/L=San Jose/O=eBay Inc./OU=Site Operations/CN=m.ebay.com
Client-SSL-Cipher: RC4-MD5
Client-SSL-Socket-Class: IO::Socket::SSL
Client-Transfer-Encoding: chunked
尝试安装IO :: Socket :: SSL mb?