SSブログ

SSLホスト認証の罠 [ソフトウェア/PC関係]

初めてのPerl 第5版
O'REILLYの「初めてのPerl 第5版」。通称「リャマ本」。第5版では,バージョン5.10に対応しているらしい。

USの知り合いに頼まれて,ちょっとしたプログラムを書いてあげた。とあるサーバーからデータを取得して処理し,結果を表形式で,HTMLファイルに出力するというというPerlのスクリプト。相手は技術系の人ではないので,間違えずに実行できるように工夫して,絵付きの説明書きまでつけて,当然,手元でちゃんと動作することを確認してから送ったのだけど,次の日,エラーが出て動かなかったというメール。

おかしいなー,と思いつつも,状況を再現するためにまっさらなVMを用意して,ActiveState.comから最新のPerl 5.12をダウンロードして実行してみたところ,やっぱりエラーになる。何がエラーなのか詳しく調べてみたところ,サーバーとのSSL通信が失敗している。ログに出力されていたのは,次のようなメッセージ。

Can't connect to www.xxx-server.com:443 (certificate verify failed)

これは恐らく,サーバーの証明書の安全性が確認できないということだろう。SSL通信では,サーバーが自分の証明書をクライアントに送りつけてくるので,発行元(認証局=CA)が信頼できる機関であること,その機関が発行した証明書に間違いないこと,などを確認できる仕組みになっている。具体的には,クライアント側に,信頼できる認証局の証明書をあらかじめ用意しておき,サーバー証明書の発行局がその中に含まれるかどうかをまずチェックし,含まれていれば,サーバー証明書の署名を,発行局の証明書で検証する,という手順になる。まぁ,認証局が信頼できるとしても,信頼に足る会社だけに証明書を発行している訳ではない,という点がこの仕組みの弱点なのだが。

仕組みはともかく,手元で試した時にうまく動作したのは何故だろう。もしかして,Perlのバージョンが違うせい? 手元のPerlは5.8.8だった。じゃぁ,5.8.8を落としてきて試してみよう...と思ったら,ActivePerlって,いつの間にか古いバージョンがダウンロードできなくなってる? 現在フリー・ダウンロード可能なのは,5.12.4と5.14.1のみ。5.6,5.8,5.10が必要なヤツは,有料版を買え,ってことみたい。5.10はともかく,5.6と5.8って,結構重要なバージョンだったりするんだけど。やっぱり今時は,ActivePerlよりもStrawberry Perlの方がお勧めなんだろうか。こうなると,昔ダウンロードしたファイルって,貴重品になるのかも知れない。

しかしこれでは,USの人に古いバージョンを使ってくれとも言えない。そもそも,WEBショッピングみたいに,個人情報やクレジット・カード番号を送る訳でもなく,相手サーバーもLAN内にある素性の知れたマシンであれば,サーバー認証なんてする必要がない。認証をオフにする方法がないものか調べていたら,こちらのページを見つけた。PERL_LWP_SSL_VERIFY_HOSTNAMEという環境変数を 0 に定義すれば良いらしい。勿論,システムの環境変数として設定しても良いが,Perlの中の話なので,プログラムの冒頭にでも

$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}=0;

と書いておけば良い。これで,Perl 5.12.4でもちゃんと動作するようになった。

因みに,別のマシンにPerl 5.12.3がインストールされていたので,そこで試したら,環境変数をセットしなくても動作した。Perlのバージョンは0.0.1しか違わないのに,同梱されているLWPのバージョンが,5.837-r1から6.02へ大きく変わっているのが原因のようだ。実際,LWPのChangesファイルを見ると,バージョン6.00からその辺の変更が入ったことが分かる。Perlってマルチプラットフォームで使えるのが便利なのだが,本当にあちこちの環境で動かそうとすると,非標準のモジュールがインストールされているとかいないとか,インストールされてても,そのバージョンの違いで足を引っ張られることがよくあるんだよね。

まぁとにかく,問題が早く解決して良かった。日本とUSだと,時差の関係で生活時間帯が合わないので,自然とチャットよりもメールに依存することになる。そうすると,メールの一往復で丸1日かかってしまうところが頭痛い。つまらないバグをいくつか直すだけで,1週間くらいすぐ経ってしまうのだ。グローバル化だのフラット化だのと言ってるけど,時差という根源的な壁を克服するいい手はないものだろうか。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

オトナファミO'REILLYの英断 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。