- Linux
- 2015-11-16 - 更新:2016-07-11
この記事は最終更新日から1年以上経過しています。
apacheにSSLを導入した場合、apacheの起動時にパスフレーズの入力を求められます。
サーバーの再起動時や、プログラム等でのapacheの自動起動でパスフレーズの入力で止まったまま起動しない、という問題が発生します。
[Apache+SSL環境の構築]の最後でも紹介したように、秘密鍵を復号化しておけばパスフレーズの入力を省略できますが、セキュリティ上良くありません。
そこで秘密鍵を復号化することなく、パスフレーズの入力を省略する方法をご紹介します。
apacheのhttpd.confの<ifModule ssl_module>ディレクティブを修正します。
<ifModule ssl_module> ... SSLPassPhraseDialog exec:{プログラムの絶対パス} </ifModule>
通常、SSLPassPhraseDialogの記述はないかと思いますが、
デフォルトはbuiltinとなっており、対話形式でパスフレーズを入力する設定になっています。
execを使用すれば、外部プログラムの標準出力からパスフレーズを受け取ってくれます。
外部プログラムの作成
例)/usr/local/bin/pp-filter
#!/bin/sh echo "pass phrase"
セキュリティ上、所有者はroot、パーミッションは500、もしくは700に設定しておきます。
プログラムにはapacheが引数を渡してくれるので、それを元にサイト毎の条件分岐が可能です。
渡される引数はサーバー名・ポート・暗号化方式の3つ。
apacheから実行される内容
/usr/local/bin/pp-filter www.example.jp:443 RSA
引数で分岐
#!/bin/sh case $1 in www.example.jp:443) echo "pass phrase 1" ;; www2.example.jp:443) echo "pass phrase 2" ;; esac exit 0
2,667 views