6

Perl v5.14.2 と libwww-perl v6.04-1 を使用して、Debian で次の Perl スニペットを実行しています。

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new("GET", "https://google.com/");
my $rep = $ua->request($req);
print $rep->status_line;

これは即座に"500 Can't connect to google.com:443" を返します。などを使用してみましたがLWP::Simple, Net::SSLeay, Crypt::SSLeay、成功しませんでした。

奇妙なことに、まったく同じバージョンの Perl と LWP を実行している別の Debian システムで同じコードを実行すると機能します。

そのため、基盤となるシステムに何らかのエラーがあると考えましたが、他のアプリケーション (任意のブラウザーの cURL など) は正常に動作しています。

また、両方openssl s_client -connect google.com:443システムで戻ります。Verify return code: 20 (unable to get local issuer certificate)

誰かがこの現象に遭遇したことがあり、解決策を持っていますか?

4

3 に答える 3

7

これの代わりに:

$ua = LWP::UserAgent->new;

これを使用してみてください:

$ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 });
于 2014-02-07T12:34:40.780 に答える
3

LWP 500エラーと戦っている他の人への参考情報:

一部の LWP 500 エラーは、別のタイプの SSL の問題 (verify_hostname 設定では解決されない) が原因であるようです。代わりに、LWP は HTTPS サーバーと通信している可能性がありますが、応答は LWP が期待するものではありません。私の場合、解決策は次の方法で SSLv3 を強制することでした。

my %ssl_options = (SSL_version => 'SSLv3');
$ua = LWP::UserAgent->new(ssl_opts => \%ssl_options), 

また、発生している 500 エラーの種類を把握しようとしている人のために、これをエラーとともに出力してください。

print $response->as_string;

私の問題 (SSLv3 を設定することで解決) の場合、 $response->as_string の出力には次のものが含まれていました。

「SSL ルーチン:SSL23_GET_SERVER_HELLO:sslv3 アラートの予期しないメッセージ LWP」

また、私のコードは以前のバージョンの Ubuntu で何年も問題なく動作していました。この問題は、Ubuntu をアップグレードしたときにのみ発生しました。LWP の新しいバージョンが古いバージョンと異なる点はおそらく複数あると結論付けたので、開発者は注意してください!

LWP の問題をうまく解決してください!

于 2014-11-11T17:21:10.963 に答える