日向夏特殊応援部隊

俺様向けメモ

中間CA証明書のインストールと設定

d:id:ZIGOROu:20080805:1217923189 の続き。

例えば先のエントリで書いたスクリプトで、https://wassr.jp/ にアクセスすると見事にオレオレ判定されちゃう訳ですが、これは単に中間CA証明書が手元にインストールされていないから起こる。

wassr の証明書を調べる、さらにCAをインストール

みたいに見れば分かる。CyberTrust が認証局のようです。google:CyberTrust 中間CA証明書 してみるとダウンロードできる場所が分かる。

からダウンロード出来るようだ。*1
テキスト版とやらをダウンロードする。今は手元の環境が cygwin なので /usr/ssl/certs にダウンロード。

$ cd /usr/ssl/certs
$ wget http://www.cybertrust.ne.jp/SureServer/file/root_ca/PUBCA.txt -O cybertrust.pem
$ ln -s cybertrust.pem `openssl x509 -in cybertrust.pem -hash -noout`.0

最後のは DSAS開発者の部屋:システム管理者の心得? 〜 OpenSSLコマンドで証明書をチェック(3) に詳しいのでそちらを参照の事。

もう一度試して見る

が上手く行かなかった。次のようにしたら上手くいった。

#!/usr/bin/perl

use strict;
use warnings;

use Carp;
use LWP::UserAgent;
use Data::Dump qw(dump);

$ENV{HTTPS_DEBUG} = 1;
$ENV{HTTPS_CA_DIR} = '/usr/ssl/certs';

my $url = $ARGV[0];

my $ua = LWP::UserAgent->new;
my $res = $ua->get($url);

unless ($res->is_success) {
  croak $res->status_line;
}
elsif ($res->header("Client-SSL-Warning")) {
    croak "Bad certs";
}
else {
    print "ok";
}

環境によって HTTPS_CA_DIR の値は変えないとダメ。

まとめ

OpenSSL ややこしい><

*1:こういうページこそ SSL で保護すべきだと思うんだけどなw