LWP::UserAgentでクライアント証明書を指定する

こないだハマったのでメモ。

クライアント証明書がによる認証を行うサーバにLWP::UserAgentでアクセスしたかったのだが、パット調べてもわからなかった。結局perldocをちゃんと読めって言う話なんだけど・・・

まずCPANを見る

「cert」とかでページ内検索するとssl_optsというメソッドを発見。
ここに載ってるオプションは三つで

  • verify_hostname
  • SSL_ca_file
  • SSL_ca_path

どれもクライアント証明書指定のためのオプションではない。
ネットでけっこうな時間調べていても見つからない。。

その前にもっとちゃんと読むべき

LWP::UserAgentのperldoc(というか上のCPAN)を見返したら、

Other options can be set and are processed directly by the SSL Socket implementation in use.

他のオプションは使ってるSSL実装をみてね、って。

うん。

なるほど書いてあった。

  • SSL_cert_file

このオプションでクライアント証明書を指定するらしい。

このときは以下の感じでアクセスできた。

my $ua = LWP::UserAgent->new;

$ua->ssl_opts(
    verify_hostname => 0,
    SSL_cert_file => 'certs/client-cert.pem',
    SSL_key_file  => 'certs/client-key.pem',
);

my $res = $ua->get($uri);

こんな感じ。ドキュメントはちゃんとよく読みませう。。