web-dev-qa-db-ja.com

パスフレーズで保護されたSSLキーを使用して、Arch Linux w / systemdでApacheを起動するにはどうすればよいですか?

私はArchLinuxの使用に比較的慣れていないので、これを正しく行うための明白な方法を見逃しているに違いないと思いますが、デーモンを自分で起動する以外に、起動時にパスフレーズで保護されたSSLキーのロックを解除する方法がわかりません。通常のサービス。保護されていないキーがある場合、またはSSL構成がない場合、Apacheは通常、systemdサービスを使用して起動します。保護されたキーを使用しようとするとすぐに、次のようなものが表示されます。

$ Sudo systemctl start httpd
Job for httpd.service failed.

$ Sudo systemctl status httpd
httpd.service - Apache Web Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: failed (Result: exit-code) since Mon 2014-02-10 11:47:07 UTC; 13ms ago
  Process: 26035 ExecStop=/usr/bin/apachectl graceful-stop (code=exited, status=0/SUCCESS)
  Process: 26042 ExecStart=/usr/bin/apachectl start (code=exited, status=1/FAILURE)
 Main PID: 25500 (code=exited, status=0/SUCCESS)

systemd[1]: Starting Apache Web Server...
apachectl[26042]: Apache/2.2.26 mod_ssl/2.2.26 (Pass Phrase Dialog)
apachectl[26042]: Some of your private key files are encrypted for security reasons.
apachectl[26042]: In order to read them you have to provide the pass phrases.
apachectl[26042]: Server {name redacted}:443 (RSA)
apachectl[26042]: Enter pass phrase:Apache:mod_ssl:Error: Private key not found.
apachectl[26042]: **Stopped
systemd[1]: httpd.service: control process exited, code=exited status=1
systemd[1]: Failed to start Apache Web Server.
systemd[1]: Unit httpd.service entered failed state.

私の知る限り、Apacheはキーのロックを解除する必要があることを知っていますが、systemdがパスフレーズのプロンプトを表示する必要があることを知っている場合、そうしようとしてもシェルに到達せず、黙って失敗します。

Apacheを起動し、systemdを使用して保護されたSSLキーのロックを解除するためのベストプラクティスの方法(または Arch Way™ )は何ですか?

5
Caleb
  • Apacheの周りにラッパースクリプトを記述して、ユニットのExecStart=に配置します(ドロップインを使用できます。ユニット全体を/etcにコピーする必要はありません)
  • ラッパースクリプトからsystemd-ask-password <Prompt>を使用し、標準出力からパスワードを読み取り、必要な方法でApacheにフィードします。
  • 余分なbashプロセスが滞らないように、スクリプトの最後からexec Apacheを忘れないでください。

これにより、systemdはすぐにパスワードを照会するか(systemctlを使用してApacheを起動した場合)、またはいわゆるエージェントの1つを使用します(wallを使用して、またはコンソールで直接パスワードを要求するデフォルトのエージェントがあります)。これは、コンプライアンスを維持するためにできる最善のことです。

2
intelfx

Systemdの方法についてはわかりませんが、Apacheはこれを可能にしますが、SSLPassPhraseDialogディレクティブで開始されます。基本的に、ファイルに小さなシェルスクリプトを作成します。

SSLPassPhraseDialog  /etc/domain.com_ssl_passphrase.sh

ファイルの内容:

#!/bin/bash
echo "passphrase"

ファイルが実行可能であることを確認してください。

chmod +x /etc/domain.com_ssl_passphrase.sh

これで、systemd経由でApacheを起動すると、サイトのSSL構成をロードするときにそのスクリプトが実行されます。

1
brandon