• このエントリーをはてなブックマークに追加

メモ

こちらを知って以来,LWP::UserAgent を利用するようなアプリケーションで HTTPS なリクエストの可能性がある場合には,(あまり考えなしに)LWP::Protocol::Net::Curl を併用するようにしています.

そんな中,ローカルや開発環境とかでオレオレ証明書なサイトへのリクエストがうまく通らず,LWP::UserAgent のオプション ssl_opts あたりを何かしら設定してみてもうまくいかず,な感じでちょっとハマったので, *とりあえず* 解決するためのメモ.

再現用コード

# foo.pl
use 5.10.0;
use warnings;
use LWP::UserAgent;
use LWP::Protocol::Net::Curl;
 
my $ua = LWP::UserAgent->new( agent => 'my::ua' );
my $res = $ua->get( 'https://ssl.oreore.example.com/' );  # オレオレ証明書なサイト
say $res->status_line;

これを実行すると...

% perl foo.pl
400 Peer certificate cannot be authenticated with known CA certificates

こんな感じに Peer certificate cannot be authenticated with known CA certificates として怒られます.

とりあえずの解決策

LWP::Protocol::Net::Curl を use する際に,オプションとして SSL_VERIFYPEER => 0 を与えてやれば OK です:

...
use LWP::Protocol::Net::Curl ( SSL_VERIFYPEER => 0 );
...
% perl foo.pl
200 OK

やったね.

解決のきっかけ

とりあえずこちらにそれっぽい文字列があったのでw:

SSL_VERIFYPEER => 0 なオプションを与えると,内部で利用しているっぽい libcurl に渡るっぽいですね.