オレオレじゃない本物の 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 <中間証明書ファイル>
この
% 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 の仕様であった。
というのを学んだメモ。
参考: