ApacheのVirtualHostでSSLのパスフレーズを聞かれた時に、自動応答できるようにしました。 VirtualHostは2サイトあり、それぞれに異なるSSLサーバ証明つまり、ことなるパスフレーズを設定しています。

下記のサイトを参考に設定しました。

参考サイト:[apache]apacheで複数のバーチャルホストでSSLキーのパスフレーズが異なる場合のSSLPassPhraseDialogの書き方

まず、現状確認しておきます。(パスフレーズを入力する。)

# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.shigizemi.com:443 (RSA)
Enter pass phrase: <<===パスフレーズを入力し「Enter」押下

Server pc.shigizemi.com:443 (RSA)
Enter pass phrase: <<===パスフレーズを入力し「Enter」押下

OK: Pass Phrase Dialog successful.
[ OK ]

「サーバのドメイン名:ポート番号」に対応してプライベートキーのパスフレーズ入力を要求されます。このままだと、システムやApacheを再起動するたびに手動入力をしなければなりません。メンテ上、管理者の負担になります。

そこで、最近まで、パスフレーズを削除して運用していました。が、プライベートキーやサーバ証明書が盗まれたときのリスクを考えるとパスフレーズは必要です。パスフレーズ自動応答に対応させましょう。

【前提条件】

  1. Apache + OpenSSLが動作している
  2. VirtualHostで運用
  3. サーバ証明書インストール済み(異なるパスフレーズ)

1.パスフレーズ自動応答用シェルスクリプト作成

例えば、/usr/local/apacheディレクトリにpassphrase.shというファイル名で保存する場合。

(1)シェルスクリプト保管場所作成

/usr/local/apacheディレクトリが存在しない場合は作成します。あれば、そのまま利用します。

# mkdir /usr/local/apache

(2)シェルスクリプト作成

# vi /usr/local/apache/passphrase.sh

passphrase.shが開くので、下記を入力し、「:wp」で保存。

#!/bin/sh

case $1 in
www.shigizemi.com:443)
/bin/echo “www.shigizemi.comのパスフレーズ
;;
pc.shigizemi.com:443)
/bin/echo “pc.shigizemi.comのパスフレーズ
;;
esac
exit 0

(3)シェルスクリプトに実行権を付与

rootのみに実行権を付与します。

# chmod 500 /usr/local/apache/passphrase.sh

2.ssl.conf編集

# vi /etc/httpd/conf.d/ssl.conf

# Pass Phrase Dialog:
# Configure the pass phrase gathering process.
# The filtering dialog program (`builtin’ is a internal
# terminal dialog) has to provide the pass phrase on stdout.
#SSLPassPhraseDialog builtin <<==コメントアウト
SSLPassPhraseDialog exec:/usr/local/apache/passphrase.sh <<==追記

編集後「:wp」で保存。

3.動作確認

 Apacheの再起動

# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

もし、「失敗」となったばあい、ログを確認しましょう。

/var/log/httpd/配下に、ログがあります確認してみましょう。まぁ、一般的なことですが、スペルミスや漏れなどは保存する前にチェックしておきます。