ziguzagu.org

Set up CA Certificate Files on Perlbal

オレオレじゃない本物の SSL 証明書を Perlbal で使うときの中間証明書の設定方法メモ。

SSL を使いたい reverse_proxy などで、

SET enable_ssl      = on
SET ssl_key_file    = /etc/perlbal/cert/cbapp-key.pem
SET ssl_cert_file   = /etc/perlbal/cert/cbapp-crt.pem
SET ssl_ca_path     = /etc/perlbal/ca
SET ssl_verify_mode = 1
SET ssl_cipher_list = ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL

という感じで設定する。

オレオレ証明書使うときと違うのは、ssl_ca_path と ssl_verify_mode を設定する、というところ。ssl_ca_path には中間証明書をおくディレクトリを指定しておく。ssl_verify_mode の設定値は IO::Socket::SSL 嫁と書かれているけれど、よくわからんので 1 (verify peer) を設定した。

で、ssl_cal_path のディレクトリには <中間証明書の hash value>.0 というファイル名で中間証明書を設置する(同じ hash value の場合は .1, .2 のようにするらしい)。hash value というのは以下のコマンドで取得できる。

% openssl x509 -noout -hash -in <中間証明書ファイル>

この .0 ファイルそのままおいておいても良かったけど、なんとなく不気味なので、

% ln -s ca-201107.pem $(openssl x509 -noout -hash -in ca-201107.pem).0

として symlink にしておいた。

中間証明書ディレクトリを ssl_ca_path で指定する、というのは IO::Socket::SSL 由来で、IO::Socket::SSL を直接使うときにも同じようにする。実際に中間証明書の処理をやるのは Net::SSLeay の CTX_load_verify_locations という関数でこいつは openssl の同名の API をよびだしているようなので、この、指定されたディレクトリの中にある hash value のファイル名をどうにかする、というのは openssl の仕様であった。

というのを学んだメモ。

参考: