11

LWP::UserAgent に、よく知られている単一のサーバーの期限切れの SSL 証明書を強制的に受け入れることができるかどうかを知りたいです。この問題は、その間にある Squid プロキシによって少し複雑になります。

次のようなデバッグ環境をセットアップするところまで行きました。

use warnings;
use strict;
use Carp;
use LWP::UserAgent;
use LWP::Debug qw(+);
use HTTP::Cookies;

my $proxy = 'http://proxy.example.net:8118';
my $cookie_jar = HTTP::Cookies->new( file => 'cookies.tmp' );
my $agent = LWP::UserAgent->new;
$agent->proxy( [ 'http' ], $proxy );
$agent->cookie_jar( $cookie_jar );

$ENV{HTTPS_PROXY} = $proxy;
$ENV{HTTPS_DEBUG} = 1;
$ENV{HTTPS_VERSION} = 3;
$ENV{HTTPS_CA_DIR}    = '/etc/ssl/certs';
$ENV{HTTPS_CA_FILE}    = '/etc/ssl/certs/ca-certificates.crt';

$agent->get( 'https://www.example.com/');

exit;

幸いなことに、私が独自の解決策を思い付く前に、問題は最終的にリモートサーバーで修正されましたが、問題が再び発生した場合に備えて、オプションで問題を回避できるようにしたいと考えています (基礎となるサービスは、私が解決する前に数時間中断されていました)。行動に移した)。

他の無関係なアプリケーションのセキュリティを緩めたくないので、もしそのような解決策が存在するなら、基礎となる Crypt::SSLeay または openSSL 実装に基づくものよりも LWP::UserAgent レベルでの解決策を好みます。もちろん、私は今でもそのような解決策を自分自身で探しています。

4

2 に答える 2

12

コメントに対処するために更新

すべての証明書チェックをバイパスするには、証明書を検証しないようにエージェントを設定できます。

$agent->ssl_opts(verify_hostname => 0);

エージェントは、使用されている SSL ソケットの実装にも設定を渡します。たとえば、 に設定IO::Socket::SSLできます。SSL_verify_mode0x00

$agent->ssl_opts(SSL_verify_mode => 0x00);
于 2008-12-03T20:16:11.890 に答える
11

SSL証明書の検証をオーバーライドしてみてください

$agent->ssl_opts(verify_hostname => 0,
              SSL_verify_mode => 0x00);

https リクエストを行う前に。

于 2013-03-20T16:03:26.693 に答える