0
my $ua = LWP::UserAgent->new();
my $res = $ua->get("https://url");
print $res->content;

使用を開始するまで、証明書が無効であるという応答が返されました (ホスト名の検証を無効にすると、サーバーは代わりに暗号化が必要であると言うでしょう) Net::SSL

$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';

私の要求を行う前に、ofc。

現時点でのモジュールのバージョン:

Crypt::SSLeay 0.58
IO::Socket::SSL 1.955
Net::SSLeay 1.55
LWP 6.05
LWP::Protocol::https 6.04

最新のものも試しましたCrypt::SSLeayが、それでも失敗しました(テスト環境でこれを試しました)。

これは、クライアントとサーバーの間のライブラリの単なる制限Crypt::SSLeayですか?暗号化方法に同意できない可能性がありますか?

またOpenSSL、問題のサーバーに手動で接続していましたが、問題なく動作し、証明書のエラーなどもありませんでした。

私の問題はすでに解決されていますが、非常に優雅に感じる方法ではありませんが、解決策を見つけるために何年も費やしたので、エラーがどこにあるのか、そして問題の根源について興味があります. SSL リクエストを他の何百ものサーバーに送信しても、この問題は発生しませんが、この 1 つのサーバーは、リクエストを暗号化する必要があるというメッセージで応答するだけです。

LWP一緒にNet:SSLもっとサポートされていますか?

問題の根本をどのように追跡しますか?

編集: 興味深いことに、これは古いバージョンのモジュールでは発生しませんでした (最近は機能しました)。LWP か何かが更新されたのではないかと強く疑っています。アップデートでこのように動作が変わるのは奇妙です。

4

2 に答える 2

0

一部のサーバーは TLSv1.2 をサポートしていません。デフォルトでは、LWP は一部のサーバーに接続しますが、より低い TLS バージョンを必要とするサーバーには接続しません。LWP 6.0x で https を介して非常に一般的な 500 エラーが発生し、LWP::UserAgent を SSL_version => 'TLSv1' に設定しても機能しませんでした。LWP が IO::Socket::SSL のみを使用するように強制し、追加のテストのために TLS バージョンを強制してみてください。

LWP::UserAgent が TLS1.1 で投稿できない

于 2013-11-30T21:10:35.633 に答える