4

WWW::Mechanize製品プロバイダーからデータベースにカタログをロードするために使用しています。このスクリプトを毎日 2 時間ごとに実行すると、約 50 の同時スレッドを使用して約 12 分で完了します。

今週末まで、すべてが完璧に機能していました。彼らは定期的なメンテナンスのために Web サイトをオフラインにし、オンラインに戻ると、私のスクリプトは機能しなくなりました。物事を分析した後、次のコードが失敗することになります。

use strict;
use warnings;

use WWW::Mechanize;

my $mec = WWW::Mechanize->new;
$mec->get('https://www.imstores.com/Ingrammicromx/login/login.aspx');

print $mec->content;

コードは (約 60 秒後に) 次のメッセージで終了します。

Error GETing https://www.imstores.com/Ingrammicromx/login/login.aspx:
Can't connect to www.imstores.com:443 at test.pl line 7.

さて、これらは私が問題を見つけるのを難しくしているポイントです:

  1. これはネットワーク関連ではありません。どのブラウザからでも同じ URL にアクセスすると、そのページが表示されます。

  2. Perl インストールの正確なコピーを含むリモート マシンで同じコードを試すと、動作します。

  3. use Net::SSL以前の場合WWW::Mechanize、非常に長い時間がかかりますが、最終的にページを取得します。

  4. 「 https://www.paypal.com 」などの他の SSL ページを試してみると、非常に高速に動作します。

  5. 繰り返しになりますが、定期メンテナンスの前に機能していました。

他に何を試すべきかわかりません。非SSL版に切り替えれば動くのですが、自動で購入しているのでやりたくないです。

なぜリモート マシンで動作するのか、なぜローカル マシンのブラウザーでページを開くことができるのかを考えながら、私の頭をよぎった多くの事柄に加えて、

SSL 公開鍵でブロックされる可能性はありますか? それは可能ですか?その場合、LWP/Mechanize が SSL セッションに使用している公開鍵は何ですか? また、別の公開鍵を使用するにはどうすればよいですか?

私の現在のセットアップに関するいくつかのデータ:

有益なコメントをお寄せいただきありがとうございます。

4

1 に答える 1

9

問題の実際の理由は次のとおりです。そのサーバーに接続するには、TLS1.2 の代わりに SSLv3 または TLS1 を使用する必要があります。これがおそらく、最初に Net::SSL を使用したときに機能した理由です。WWW:Mechanize とは違う方法で、さまざまな暗号を試すと思います。

これは私がそれを見つけた方法です:

いくつかの異なるサーバーから接続しようとしましたが、機能していたサーバーの SSL バージョンが古いことがわかりました。次に、各バージョンで使用されている暗号の違いを確認し、異なる暗号で接続してみました。

TLS1.2 を使用して接続すると、次のようになります。

$ openssl s_client -connect www.imstores.com:443 -tls1_2
CONNECTED(00000003)
write:errno=54
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 322 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---

しかし、SSLv3 または TLS1 で接続すると、次のようになります。

$ openssl s_client -connect www.imstores.com:443 -tls1
CONNECTED(00000003)
depth=0 /serialNumber=O3gPUAuGGROuHEhlyLaeJfj7SOn6tFTx/C=US/O=www.imstores.com/OU=GT29846307/OU=See www.geotrust.com/resources/cps (c)11/OU=Domain Control Validated - QuickSSL(R) Premium/CN=www.imstores.com
verify error:num=20:unable to get local issuer certificate
[...and so on, including server certificate...]

WWW:Mechanize で TLS1 または SSLv3 を使用する正確な方法は、学生の課題として残されています。

于 2013-04-16T09:10:37.510 に答える