SSLを組み込みApache(HTTPD)でパスフレーズ入力が合わず起動できない

Apache
SSLを組み込んでApacheを起動する時に、正しいとパスフレーズを入力しているのに起動できない。

この疑問に回答します。

今まで、Openssl を利用しSSL証明書を作ったことが無かったです。初めて Openssl を利用したSSL証明書でのApacheを構築しましたのでまとめます。

秘密鍵(keyファイル)のパスフレーズが合わない

秘密鍵にパスフレーズが入力されていると、apache(httpd)を起動する際にパスフレーズの入力を求められます。

# systemctl restart httpd
Enter SSL pass phrase for [mydomain]:443 (RSA) : **********
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.

お恥ずかしながら、私は今まで知らなかった。

SSLアクセラレーターを利用することばかりで秘密鍵から作成することが初めてです。

何故か、正しいパスフレーズを入力しても起動できません

既に認証局からサインされたSSL証明書が発行されています。

ここで解決できないとCSRから作り直すのが手っ取り早いので、パスフレーズ無しで秘密鍵を作ればよかったと後悔しています。

今回利用した認証局では、証明書の再発行は面倒臭いことが判明しました。

Broadcast messageが発報される

apache(httpd)の起動時にパスフレーズの入力を求めるブロードキャストのメッセージが出力されます。

Password entry required for 'Enter SSL pass phrase for [mydomain]:443 (RSA) :' (PID 3302).
Please enter password with the systemd-tty-ask-password-agent tool!

パスフレーズの入力は、「systemd-tty-ask-password-agent」コマンドを利用することで、誰でも(別コンソール)入力できるようです。マルチユーザーの概念ですね。

「パスフレーズが合わない」ことと関係ありません。別コンソールからでもパスフレーズが入力できるってことです。

systemd-tty-ask-password-agent コマンドの使い方

別のコンソールからでも、SSLパスフレーズ入力に対応することができます。

# systemd-tty-ask-password-agent
Enter SSL pass phrase for [mydomain]:443 (RSA) : **********

ちなみに、私の環境では、systemd-tty-ask-password-agentコマンドを利用して、正しいパスフレーズを入力しても起動できませんでした。

証明書の再発行

今回利用した認証局は、証明書の再発行の認証方法が「メール認証」でした。

認証局が指定するメールアドレスに承認確認メールが届き、メール本文に従って承認作業を行って証明書が再発行されます。

メールサーバーを構築する必要があるので、面倒臭いから辞めました。

秘密鍵ファイルのパスフレーズ解除

証明書の再発行を諦めて、秘密鍵ファイルのパスフレーズ解除で対応することにします。

組込まれたパスフレーズの内容を確認する

openssl rsaコマンドに-textのオプションをつけて実行してパスフレーズが正しいことを確認します。

今回は、「パスフレーズが正しいのに、何故かApacheの起動でパスフレーズが通らない」ので、この方法で試します。

# openssl rsa -text < secret.key
Enter pass phrase:
Private-Key: (2048 bit)
modulus:
    00:cb:81:d2:78:d9:fc:1c:63:f4:b6:be:2c:4b:a5:
    b4:54:4f:ca:e0:83:24:6c:16:dd:4c:61:b8:fd:3a:
  (中略)
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAy4HSeNn8HGP0tr4sS6W0VE/K4IMkbBbdTGG4/TplZUskg05Y
  (中略)
SaYOKMsI4J1XhGbaT3XDQCD6g4XpJZFS0XIKmcZhRmIqkyjKfB11wg==
-----END RSA PRIVATE KEY-----

パスフレーズを入力することで、秘密鍵ファイルの内容を、確認することができました。

パスフレーズ解除の手順

秘密鍵のバックアップ
# cp secret.key secret.key.org

パスフレーズ解除
# openssl rsa -in secret.key -out secret-nopass.key
Enter pass phrase for [mydomain]:
writing RSA key

簡単ですね。

再度、秘密鍵ファイルの内容を確認します。

# openssl rsa -text < secret.key
Private-Key: (2048 bit)
modulus:
    00:cb:81:d2:78:d9:fc:1c:63:f4:b6:be:2c:4b:a5:
    b4:54:4f:ca:e0:83:24:6c:16:dd:4c:61:b8:fd:3a:
  (中略)
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAy4HSeNn8HGP0tr4sS6W0VE/K4IMkbBbdTGG4/TplZUskg05Y
  (中略)
SaYOKMsI4J1XhGbaT3XDQCD6g4XpJZFS0XIKmcZhRmIqkyjKfB11wg==
-----END RSA PRIVATE KEY-----

パスフレーズなしで秘密鍵ファイルの内容が確認できました。

これでパスフレーズを解除した秘密鍵さ作成されましたので、apacheの設定ファイルに組込めば完了です。

Jun 11 15:40:54 [mydomain] systemd: Starting The Apache HTTP Server...
Jun 11 15:40:54 [mydomain] systemd: Started The Apache HTTP Server.

無事に起動することが出来ました。

 

以上、「SSLを組み込みApache(HTTPD)でパスフレーズ入力が合わず起動できない」という記事でした。