.. _good_practice_howtousepasswd: ============================================================== パスフレーズで保護された SSL 秘密鍵を用いた Apache / NGINX 設定 ============================================================== .. contents:: 目次 :local: :depth: 2 対象読者 ======== 本ドキュメントは,学内の Web サーバ管理者を対象とする. 概要 ==== 本ドキュメントの目的 -------------------- 秘密鍵にパスフレーズを設定した状態で Web サーバを運用する場合,サーバ起動時にパスフレーズの入力が必要となる. 本ドキュメントでは,この入力作業を自動化する方法を示す. 検証環境 -------- 以下の環境で動作を確認した. .. code-block:: console testuser@testbench:~$ uname -a Linux testbench.cc.uec.ac.jp 6.8.0-79-generic #79-Ubuntu SMP PREEMPT_DYNAMIC Tue Aug 12 14:42:46 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux testuser@testbench:~$ cat /etc/os-release PRETTY_NAME="Ubuntu 24.04.3 LTS" NAME="Ubuntu" VERSION_ID="24.04" VERSION="24.04.3 LTS (Noble Numbat)" VERSION_CODENAME=noble ID=ubuntu ID_LIKE=debian testuser@testbench:~$ apt list apache2 nginx Listing... Done apache2/noble-updates,noble-security,now 2.4.58-1ubuntu8.8 amd64 [installed] nginx/noble-updates,noble-security,now 1.24.0-2ubuntu7.5 amd64 [installed] Apache2 での設定方法 ==================== 設定の全体像 ------------ Apache2 では,シェル・スクリプトを用いてパスフレーズを自動入力する. 設定後のディレクトリ構成は以下の通りである. .. code-block:: text /etc/apache2/ ├── apache2.conf ├── conf.d/ │ └── pass_ssl.sh # パスフレーズを返すスクリプト ├── ssl/ │ ├── server.crt # SSL 証明書 │ └── server.key # パスフレーズ付き秘密鍵 └── (その他の設定ファイル) 設定手順 -------- **ステップ 1: パスフレーズ付き秘密鍵の作成** パスフレーズを設定した秘密鍵を作成する. .. note:: 本例では,パスフレーズを ``ThisIsPassphrase`` として説明する. **ステップ 2: 証明書と秘密鍵の配置** 作成した証明書と秘密鍵を ``/etc/apache2/ssl/`` に配置する.Apache 設定ファイルで以下のディレクティブを設定する. .. code-block:: apache SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key **ステップ 3: パスフレーズ自動入力スクリプトの作成** ``/etc/apache2/conf.d/passphrase.sh`` を作成する.パスフレーズを出力するスクリプトを記述する. .. code-block:: bash #!/bin/sh /usr/bin/echo "ThisIsPassphrase" .. code-block:: console testuser@testbench:~$ sudo vim /etc/apache2/conf.d/passphrase.sh **ステップ 4: スクリプトの権限設定** スクリプトを実行可能にする.root ユーザのみが読み取り・実行できるように権限を設定する. .. code-block:: console testuser@testbench:~$ sudo chmod 500 /etc/apache2/conf.d/passphrase.sh testuser@testbench:~$ sudo chown root:root /etc/apache2/conf.d/passphrase.sh **ステップ 5: Apache の設定変更** Apache 設定ファイル (通常は ``/etc/apache2/mods-available/ssl.conf`` または ``apache2.conf``) で, ``SSLPassPhraseDialog`` ディレクティブを変更する. .. code-block:: apache # 変更前 SSLPassPhraseDialog exec:/usr/share/apache2/ask-for-passphrase # 変更後 SSLPassPhraseDialog exec:/etc/apache2/conf.d/passphrase.sh **ステップ 6: 動作確認** Apache を再起動する.パスフレーズの入力なしで起動できることを確認する. .. code-block:: console testuser@testbench:~$ sudo systemctl restart apache2 testuser@testbench:~$ sudo systemctl status apache2 NGINX での設定方法 ================== 設定の全体像 ------------ NGINX では,パスフレーズを記載したテキスト・ファイルを用いて自動入力を行う. 設定後のディレクトリ構成は以下の通りである. .. code-block:: text /etc/nginx/ ├── nginx.conf ├── sites-available/ │ └── default ├── sites-enabled/ │ └── default -> /etc/nginx/sites-available/default └── ssl/ ├── passphrase # パスフレーズを記載したファイル ├── server.crt # SSL 証明書 └── server.key # パスフレーズ付き秘密鍵 設定手順 ----------- **ステップ 1: パスフレーズ付き秘密鍵の作成** パスフレーズを設定した秘密鍵を作成する. .. note:: 本例では,パスフレーズを ``ThisIsPassphrase`` として説明する. **ステップ 2: 証明書と秘密鍵の配置** 作成した証明書と秘密鍵を ``/etc/nginx/ssl/`` に配置する.NGINX 設定ファイルで以下のディレクティブを設定する. .. code-block:: bash server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ... } **ステップ 3: パスフレーズ・ファイルの作成** ``/etc/nginx/ssl/passphrase`` を作成する.パスフレーズを記載する. .. code-block:: bash testuser@testbench:~$ sudo sh -c 'echo "ThisIsPassphrase" > /etc/nginx/ssl/passphrase' または,エディタで直接編集する. .. code-block:: text ThisIsPassphrase **ステップ 4: パスフレーズ・ファイルの権限設定** root ユーザのみが読み取れるように権限を設定する. .. code-block:: bash testuser@testbench:~$ sudo chmod 400 /etc/nginx/ssl/passphrase testuser@testbench:~$ sudo chown root:root /etc/nginx/ssl/passphrase **ステップ 5: NGINX の設定変更** NGINX 設定ファイルの ``server`` ブロック内に, ``ssl_password_file`` ディレクティブを追加する. .. code-block:: bash server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_password_file /etc/nginx/ssl/passphrase; # この行を追加 ... } **ステップ 6: 動作確認** NGINX を再起動する.パスフレーズの入力なしで起動できることを確認する. .. code-block:: bash testuser@testbench:~$ sudo systemctl restart nginx testuser@testbench:~$ sudo systemctl status nginx 参考 ======== * `SSL使用時にApacheの再起動時で必要なパスワードの入力を省略 `_ * `NGINX の起動時に SSL 証明書の秘密鍵のパスフレーズを自動で入力させる方法 `_