2013-04-16 3 views
4

Я использую WWW::Mechanize для загрузки каталога нашего поставщика продуктов в нашу базу данных. Я запускаю этот скрипт каждые 2 часа каждый день, и он заканчивается за 12 минут, используя около 50 одновременных потоков.Пожалуйста, помогите мне отладить проблему SSL с помощью WWW :: Mechanize (или LWP :: UserAgent)

Все работало отлично, до этих выходных. Они помещают свой веб-сайт в автономном режиме для запланированного обслуживания, и, как только они снова будут в Интернете, мой скрипт больше не работает. После анализа вещей, сводится к следующему коду неисправный:

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. Если я пытаюсь использовать любую другую страницу SSL, например 'https://www.paypal.com', она работает и очень быстро.

  5. С другой стороны, это работало до запланированного технического обслуживания.

Я не уверен, что еще попробовать. Если я переключусь на версию, отличную от SSL, она работает, но я не хочу этого делать, поскольку мы автоматизируем операции покупки.

Наряду со многими вещами, которые пересекли мой ум, думая о том, почему он работает на удаленной машине, и почему я могу открыть страницу в моих браузерах в локальном одном:

Можно ли блокировано с моим Открытый ключ SSL? Это возможно? Если да, то какой открытый ключ используется LWP/Mechanize для сеансов SSL и как я могу использовать другой?

Некоторые данные о моей текущей настройки:

Заранее спасибо за любой полезный комментарий.

+0

Нет открытого ключа для SSL; Я думаю, вы сбиваете с толку SSH. У вас такая же проблема, если вы используете SSL-соединение непосредственно из командной строки ('openssl s_client -connect www.imstores.com: 443')? Это может дать вам некоторую информацию. –

+0

Вы уверены, что не заблокировали веб-сервер? – AnFi

+0

(1) может быть неверным. Ваш браузер может использовать прокси. – ikegami

ответ

9

Настоящая причина неполадки: Для подключения к этому серверу необходимо использовать SSLv3 или TLS1 вместо TLS1.2. Вероятно, поэтому это сработало, когда вы сначала использовали 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: Механизируйте использование TLS1 или SSLv3 остается в качестве упражнения для ученика.

+0

Удивительно, большое вам спасибо! Я указал 'ssl_opts => {SSL_version => 'SSLv3'}' в конструкторе для WWW :: Mechanize, и он работает красиво снова. На самом деле, спасибо, что нашли время ответить на это! :-) –

+0

Добро пожаловать, отладка SSL - одно из моих увлечений :-) –