今回やること
SSL証明書を使用する場合、Apacheの再起動時に秘密鍵のパスワードの入力を求められます。
開発段階だと、VirtualHostの設定を変更する度に再起動したりすることが多く、一台に複数のアプリケーションを保持している場合は、それぞれのパスワードの入力が必要になります。
これが結構手間で割と安全に省くことができるので紹介します。
現状の確認
- CentOS 6.8
- Apache 2.2.15
$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting 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 exapmple.com:443 (RSA)
Enter pass phrase: # ← ここに毎回入力が必要
このパスワードを無しで再起動出来るようにしていきます。
SSL証明書がひとつの場合
パスワード自動応答スクリプトを作成
パスワードを出力するシェルスクリプトを作成しておき、それを読み出すだけで出来ます。
$ sudo vim /etc/ssl/certs/pass_ssl.sh
#!/bin/sh
echo 'tVKJDtQf4euzCPss'
rootのみ読み書きできるようにしておきます。
$ sudo chmod 500 /etc/ssl/certs/pass_ssl.sh
Apache の設定
Apacheの設定ファイルを変更します。
例)/etc/httpd/conf.d/vhost.conf
# SSLPassPhraseDialog builtin # ← コメントアウト
SSLPassPhraseDialog exec:/etc/ssl/certs/pass_ssl.sh
これでApacheを再起動した場合にもパスワードの入力を省略出来ます。
SSL証明書を複数管理している場合
SSLPassPhraseDialog
は VirtualHost
内に入れることができないため、/etc/ssl/certs/pass_ssl.sh
に多少工夫が必要です。
パスワード自動応答スクリプトを作成
例えば、example1.com
と example2.com
のふたつのドメインがあると仮定します。
$ sudo vim /etc/ssl/certs/pass_ssl.sh
#!/bin/sh
case $1 in
example1.com:443)
echo 'W4g0B1OAxKCGoaZm';;
example2.jp:443)
echo '2Ly8t0qOFVkdaRew';;
esac
exit 0
この場合も、rootのみ読み書きできるようにしておきます。
$ sudo chmod 500 /etc/ssl/certs/pass_ssl.sh
Apacheの設定
Apacheの設定ファイルを変更します。
例)/etc/httpd/conf.d/vhost.conf
# SSLPassPhraseDialog builtin # ← コメントアウト
SSLPassPhraseDialog exec:/etc/ssl/certs/pass_ssl.sh
これでApacheを再起動をすると、パスワードの入力を省略できます。
まとめ
案外面倒だったので、結構便利です。
この方法以外にも、秘密鍵のパスフレーズを削除する方法もあるそうです。
参考:apacheで複数のバーチャルホストでSSLキーのパスフレーズが異なる場合のSSLPassPhraseDialogの書き方
おまけ
フォローお待ちしています!
- Qiita: Carat 吉崎
- twitter:@carat_yoshizaki
- はてなブログ:Carat COOのブログ
- ホームページ:Carat
サービス紹介
「数学→プログラミング→Webアプリケーション」まで一気に学べる機械学習のマンツーマン家庭教師サービス「キカガク」に興味のある方はお気軽にご連絡ください。