UserAgent 使った SSL 通信でハマってしまった[Perl]
(2015-05-15 14:03:01) by shinoda
サーバ移行案件で、ある Perl プログラムを新サーバに移行した。
そのプログラムは、LWP::UserAgent モジュールを使って、外部の HTTPS サーバと通信をしている。
まあ、写真のデータを取ってくるだけなんですけど。
ところが、新しいサーバで HTTPS 接続しても空のデータしか取れない。
Crypt::SSLeay
IO::Socket::SSL
や、ついでに
Net::SSLeay
とかとか。SSL 通信を行なうためのモジュールは入っているのに・・・である。
試しに、
#!/usr/bin/perl
use HTTP::Status;
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("LWP::GETHEAD");
$url = $ARGV[0];
$request = new HTTP::Request HEAD => $url;
$response = $ua->request($request);
print "Content-Type:\t", $response->header("Content-Type"),"\n";
print "Content-Length:\t", $response->header("Content-Length"),"\n";
print "Last-Modified:\t", $response->header("Last-Modified"),"\n";
print "Expires:\t", $response->header("Expires"),"\n";
print "Server: \t", $response->header("Server"),"\n";
こういうスクリプトを作って走らせてみても、
# perl test.pl https://www.exsample.jp/
Content-Type: text/plain
Content-Length:
Last-Modified:
Expires:
Server:
という寂しい結果が返ってくるだけ。
なんじゃ?と思ったのだが、そう言えば IO::Socket::SSL モジュールのバージョンが上がって、「ホスト同士で証明書交換せえよ。それが出来んのだったら『セキュリティ的には緩くなっちゃうのがわかってて、あえて証明書は用意してないんですよ』という意思表明のために、verify_hostname オプションを明示的に書けよ」ということになったのを思い出した。以前、
このブログにも書いたことあるけどな。
というわけで、スクリプトに、
#!/usr/bin/perl
use HTTP::Status;
use LWP::UserAgent;
$ua = new LWP::UserAgent;
$ua->agent("LWP::GETHEAD");
$ua->ssl_opts( verify_hostname => 0 );
$url = $ARGV[0];
$request = new HTTP::Request HEAD => $url;
$response = $ua->request($request);
print "Content-Type:\t", $response->header("Content-Type"),"\n";
print "Content-Length:\t", $response->header("Content-Length"),"\n";
print "Last-Modified:\t", $response->header("Last-Modified"),"\n";
print "Expires:\t", $response->header("Expires"),"\n";
print "Server: \t", $response->header("Server"),"\n";
という具合に一文入れてやるだけで、
# perl test.pl https://www.exsample.jp/
Content-Type: text/html
Content-Length: 18469
Last-Modified: Sun, 01 Mar 2015 00:04:16 GMT
Expires:
Server: Apache
このように通信可能となる。
そう言えば、この当該プログラムを書いたの、6年も前だ(^^;
長く動いているプログラムは、移行の時に色々ある(^^;
コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る
Powered by
MT4i 3.0.8