nginx 起動時に秘密鍵のパスフレーズを自動で入力させる
Web サイト
SSL 電子証明書の秘密鍵にパスフレーズを設定していると、Web サーバーを起動する度にパスフレーズの入力が必要になります。
OS を再起動する度に再入力するのは現実的ではないので、OS 起動時に自動でパスワードが入力されるようにしてみました。
Web サーバー nginx で SSL 電子証明書の秘密鍵にパスフレーズを設定していると、Web サーバーを起動する度にパスフレーズの入力が必要になります。
Linux を再起動する度に再入力するのは現実的ではないので、Linux 起動時に nginx を自動起動させるのに合わせて SSL 電子証明書の秘密鍵に設定されているパスフレーズを自動入力させてみることにしました。
できれば、普段と同じように service nginx start
で自動入力したかったのですけど、実現方法がわからなかったため、今回は専用の起動用スクリプトを作って使う方法にしています。
nginx を設定した時のお話は こちら で紹介しています。
expect をインストールする
パスフレーズを自動で入力するのに、今回は expect
というツールを使うことにします。CentOS 5.11 では yum を使って次のようにインストールできます。
yum install expect
起動用スクリプトを作成する
そして expect を使ってパスフレーズを自動入力するためのスクリプトを作成します。
今回は次のような内容で /etc/nginx/script/nginx-start
という名前で作成しておくことにしました。
#!/bin/sh
. /etc/nginx/script/pp.txt
/usr/bin/expect -c "
set timeout 20
spawn service nginx start
log_file /var/log/expect-nginx.log
expect \"Enter PEM pass phrase:\"
send \"${PP}\n\"
interact
"
また、このスクリプトではパスフレーズを /etc/nginx/script/pp.txt
から取り込むようにしています。このファイルは次のように作成します。
PP="********"
ここの PP
に、SSL で使う電子証明書の秘密鍵に設定したパスフレーズを指定します。
これらのファイルの準備ができたら、次のようにパーミッションを調整します。
chmod +x /etc/nginx/script/nginx-start
chmod go-r /etc/nginx/script/pp.txt
これで起動用スクリプトの準備ができました。
起動用スクリプトの動きとしては、最初に別ファイル (/etc/nginx/script/pp.txt
) に記載したパスフレーズを取り込んでから、expect コマンドを使って service nginx start
を実行、そして Enter PEM pass phrase:
と表示されたらパスフレーズを自動で入力する、という流れになります。
あとは次のようにすることで、nginx の起動と合わせて、秘密鍵のパスフレーズを自動で入力してくれます。
/etc/nginx/script/nginx-start
起動用スクリプトを使って nginx を起動する
Linux 起動時に、ここで作成した起動用スクリプトを使って nginx を起動させるようにしてみます。
通常は /etc/init.d/nginx
を Linux 起動時に自動でスタートさせて nginx を起動させる方法がとられると思いますが、今回は先ほど作成した『パスフレーズを自動入力してくれる起動用スクリプト』を使って起動させるようにします。
そのために、まずは Linux 起動時の自動スタートを無効化します。
chkconfig nginx off
これで nginx の自動起動が無効になりました。
そうしたら、システム起動の最後に任意のスクリプトを実行させるのに使う /etc/rc.local
の最後の方に次の1行を追加します。
/etc/nginx/script/nginx-start
こうすることで、Linux が起動した最後あたりに自作の nginx 起動用スクリプトが実行されて、nginx の起動とパスフレーズの自動入力が行われます。