ApacheでHTTPS暗号化通信を使うと、SSL秘密鍵のパスフレーズを訊かれます。パスフレーズ入力をしないと先に進まない。そのため障害復旧時Apacheが起動せずアタフタしました。調べ見たらPassphraseのダイアログでとまっていました。
Apacheパスワード入力ダイアログを省略する方法
どちらの方法もセキュリティ強度を下げることには変わりはないです。2の方法はシェルスクリプトを起動するので、Wgetでパスフレーズを取得すると行ったアクロバットな方法も可能です。柔軟性を重視するなら2がおすすめです。複数証明書がある場合は2が楽です。
パスフレーズをファイルから読み込む方法
ApacheのSSL設定を編集しexecに変更します。
(Debianなら /etc/apache2/mods-enabled/ssl.conf)
32 # Pass Phrase Dialog: 33 # Configure the pass phrase gathering process. 34 # The filtering dialog program (`builtin' is a internal 35 # terminal dialog) has to provide the pass phrase on stdout. 36 #SSLPassPhraseDialog builtin #初期設定 37 SSLPassPhraseDialog exec:/etc/apache2/certs/pass_phrase.sh #今回の設定 38
パスワード入力スクリプトを作りました
/etc/apache2/certs/pass_phrase.sh
#!/bin/sh echo "my pass phrase"
入力スクリプトを起動して試してみます。
$ /etc/apache2/certs/pass_phrase.sh my pass phrase
実行権限を忘れずに。(安全のためpermissionは500 でオーナーはRootにしました。)
スクリプトファイルに渡される引数
スクリプトファイルにはApacheから引数が渡されます。コレを使って条件分岐が可能になります。SSLPassPhraseDialogスクリプトにサーバー名とポート、暗号化方式を渡してくれる。
/etc/apache2/certs/pass_phrase.sh www.exmaple.com:443 RSA
のように、証明書ごとに起動してくれます。そこで、サーバーごとにパスフレーズを変えておくことが可能になります。
サーバーごとに違うパスフレーズを設定する。
http://d.hatena.ne.jp/learn/20110125/p1/usr/local/apache/bin/pp_filter
#!/bin/sh case $1 in www1.example.jp:443) /bin/echo "server1.keyのパスフレーズ" ;; www2.example.jp:8443) /bin/echo "server2.keyのパスフレーズ" ;; esac exit 0