第1章 Apache HTTP Web サーバーの設定

1.1. Apache HTTP Web サーバーの概要

Web サーバー は、Web 経由でクライアントにコンテンツを提供するネットワークサービスです。これは通常 Web ページを指しますが、他のドキュメントも当てはまります。Web サーバーは、ハイパーテキスト転送プロトコル (HTTP) を使用するため、HTTP サーバーとも呼ばれます。

Apache HTTP Server (httpd) は、Apache Software Foundation が開発したオープンソースの Web サーバーです。

Red Hat Enterprise Linux の以前のリリースからアップグレードする場合は、適切に httpd サービス設定を更新する必要があります。本セクションでは、新たに追加された機能の一部と、以前の設定ファイルの更新を説明します。

1.1.1. Apache HTTP Server への主な変更点

RHEL 8 では、Apache HTTP Server が、RHEL 7 のバージョン 2.4.6 から、バージョン 2.4.37 に更新しました。この更新バージョンには新機能がいくつか含まれていますが、外部モジュールの設定および Application Binary Interface (ABI) のレベルでは、RHEL 7 バージョンとの後方互換性を維持します。

新機能は次のとおりです。

  • httpd モジュール含まれる mod_http2 パッケージにより、HTTP/2 に対応するようになりました。
  • systemd ソケットのアクティベーションが対応します。詳細は、man ページの httpd.socket(8) を参照してください。
  • 新しいモジュールが複数追加されています。

    • mod_proxy_hcheck - プロキシーのヘルスチェックモジュール
    • mod_proxy_uwsgi - Web Server Gateway Interface (WSGI) プロキシー
    • mod_proxy_fdpass - クライアントのソケットを別のプロセスに渡す
    • mod_cache_socache - HTTP キャッシュ (例: memcache バックエンドを使用)
    • mod_md - ACME プロトコルの SSL/TLS 証明書サービス
  • 以下のモジュールはデフォルトで読み込まれるようになりました。

    • mod_request
    • mod_macro
    • mod_watchdog
  • 新しいサブパッケージ httpd-filesystem が追加されています。これには、Apache HTTP Server の基本的なディレクトリーレイアウト (ディレクトリーの適切な権限を含む) が含まれます。
  • インスタンス化されたサービスのサポート httpd@.service が導入されました。詳細は、man ページの httpd.service を参照してください。
  • 新しい httpd-init.service%post script に置き換わり、自己署名の鍵ペア mod_ssl を作成します。
  • (Let’s Encrypt などの証明書プロバイダーで使用するため) 自動証明書管理環境 (ACME) プロトコルを使用した、TLS 証明書の自動プロビジョニングおよび更新に、mod_md パッケージで対応するようになりました。
  • Apache HTTP Server が、PKCS#11 モジュールを利用して、ハードウェアのセキュリティートークンから、TLS 証明書および秘密鍵を直接読み込むようになりました。これにより、mod_ssl 設定で、PKCS#11 URL を使用して、SSLCertificateKeyFile ディレクティブおよび SSLCertificateFile ディレクティブに、TLS 秘密鍵と、必要に応じて TLS 証明書をそれぞれ指定できるようになりました。
  • /etc/httpd/conf/httpd.conf ファイルの新しい ListenFree ディレクティブに対応するようになりました。

    Listen ディレクティブと同様、ListenFree は、サーバーがリッスンする IP アドレス、ポート、または IP アドレスとポートの組み合わせに関する情報を提供します。ただし、ListenFree を使用すると、IP_FREEBIND ソケットオプションがデフォルトで有効になります。したがって、httpd は、ローカルではない IP アドレス、または今はまだ存在していない IP アドレスにバインドすることもできます。これにより、httpd がソケットをリッスンできるようになり、httpd がバインドしようとするときに、基になるネットワークインターフェースまたは指定した動的 IP アドレスを起動する必要がなくなります。

    ListenFree ディレクティブは、現在 RHEL 8 でのみ利用できます。

    ListenFree の詳細は、以下の表を参照してください。

    表1.1 ListenFree ディレクティブの構文、状態、およびモジュール

    構文状態モジュール

    ListenFree [IP-address:]portnumber [protocol]

    MPM

    event、worker、prefork、mpm_winnt、mpm_netware、mpmt_os2

その他の主な変更点は次の通りです。

  • 以下のモジュールが削除されました。

  • RHEL 8 の Apache HTTP Server が使用するデフォルトの DBM 認証データベースのデフォルトタイプが、SDBM から db5 に変更になりました。
  • Apache HTTP Servermod_wsgi モジュールが Python 3 に更新されました。WSGI アプリケーションは Python 3 でしか対応していないため、Python 2 から移行する必要があります。
  • Apache HTTP Server を使用してデフォルトで設定されたマルチプロセッシングモジュール (MPM) は、マルチプロセスのフォークモデル (prefork として知られています) から、高パフォーマンスのマルチスレッドモデル event に変更しました。

    スレッドセーフではないサードパーティーのモジュールは、交換または削除する必要があります。設定した MPM を変更するには、/etc/httpd/conf.modules.d/00-mpm.conf ファイルを編集します。詳細は、man ページの httpd.service(8) を参照してください。

  • suEXEC によりユーザーに許可される最小 UID および GID はそれぞれ 1000 および 500 です (以前は 100 および 100 でした)。
  • /etc/sysconfig/httpd ファイルは、httpd サービスへの環境変数の設定に対応するインターフェースではなくなりました。systemd サービスに、httpd.service(8) の man ページが追加されています。
  • httpd サービスを停止すると、デフォルトで「自動停止」が使用されます。
  • mod_auth_kerb モジュールが、mod_auth_gssapi モジュールに置き換わりました。

1.1.2. 設定の更新

Red Hat Enterprise Linux 7 で使用されている Apache HTTP Server バージョンから設定ファイルを更新するには、以下のいずれかのオプションを選択します。

  • /etc/sysconfig/httpd を使用して環境変数を設定する場合は、代わりに systemd ドロップインファイルを作成します。
  • サードパーティーのモジュールを使用する場合は、そのモジュールがスレッド化 MPM と互換性があることを確認してください。
  • suexec を使用する場合は、ユーザーおよびグループの ID が新しい最小値に合致していることを確認します。

以下のコマンドを使用すると、設定に誤りがないかどうかを確認できます。

# apachectl configtest
Syntax OK

1.2. Apache 設定ファイル

httpd サービスが起動すると、デフォルトでは、表1.2「httpd サービスの設定ファイル」に一覧表示されている場所から設定が読み込まれます。

表1.2 httpd サービスの設定ファイル

パス説明

/etc/httpd/conf/httpd.conf

主要設定ファイル。

/etc/httpd/conf.d/

主要設定ファイル内に含まれている設定ファイル用の補助ディレクトリー。

/etc/httpd/conf.modules.d/

Red Hat Enterprise Linux にパッケージ化されたインストール済みの動的モジュールを読み込む設定ファイルの補助ディレクトリー。デフォルト設定では、この設定ファイルが最初に処理されます。

デフォルト設定はほとんどの状況に適していますが、その他の設定オプションを使用することもできます。変更を有効にするには、まず Web サーバーを再起動します。httpd サービスを再起動する方法は、「httpd サービスの管理」を参照してください。

設定に誤りがないことを確認するには、シェルプロンプトで以下のコマンドを実行します。

# apachectl configtest
Syntax OK

間違いからの復元を容易にするため、編集する前にオリジナルファイルのコピーを作成します。

1.3. httpd サービスの管理

本セクションでは、httpd サービスを起動、停止、および再起動するためのホットを説明します。

前提条件

  • Apache HTTP Server がインストールされている。

手順

  • httpd サービスを起動するには、以下を入力します。

    # systemctl start httpd
  • httpd サービスを停止するには、以下を入力します。

    # systemctl stop httpd
  • httpd サービスを再起動するには、次のコマンドを実行します。

    # systemctl restart httpd

1.4. シングルインスタンスの Apache HTTP サーバーの設定

本セクションでは、静的 HTML コンテンツを提供するために 1 つのインスタンスの Apache HTTP Server を設定する方法を説明します。

Web サーバーが、サーバーに関連付けられたすべてのドメインに対して同じコンテンツを提供する必要がある場合は、このセクションの手順に従います。異なるドメインに異なるコンテンツを提供する場合は、名前ベースの仮想ホストを設定します。詳細は「Apache 名ベースの仮想ホストの設定」を参照してください。

手順

  1. httpd パッケージをインストールします。

    # yum install httpd
  2. ローカルのファイアウォールで TCP ポート 80 を開きます。

    # firewall-cmd --permanent --add-port=80/tcp
    # firewall-cmd --reload
  3. httpd サービスを有効にして起動します。

    # systemctl enable --now httpd
  4. 必要に応じて、HTML ファイルを /var/www/html/ ディレクトリーに追加します。

検証手順

  • Web ブラウザーで http://server_IP_or_host_name/ に接続します。

    /var/www/html/ ディレクトリーが空であるか、index.html または index.htm ファイルが含まれていない場合は、Apache が Red Hat Enterprise Linux Test Page を表示します。/var/www/html/ に異なる名前の HTML ファイルが含まれる場合は、http://server_IP_or_host_name/example.html のように、そのファイルに URL を入力して読み込むことができます。

関連情報

  • Apache の設定やお使いの環境へのサービスの適合に関する詳細は、Apache のマニュアルを参照してください。マニュアルのインストールの詳細は、「Apache HTTP Server の手動インストール」を参照してください。
  • httpd systemd サービスの使用または調整の詳細は、man ページの httpd.service(8) を参照してください。

1.5. Apache 名ベースの仮想ホストの設定

名前ベースの仮想ホストは、Apache がサーバーの IP アドレスに解決する異なるドメインに対して異なるコンテンツを提供できるようにします。

本セクションの手順では、example.com ドメインおよび example.net ドメインの両方に、別のドキュメントルートディレクトリーを持つ仮想ホストを設定する方法を説明します。両方の仮想ホストが静的 HTML コンテンツに対応します。

前提条件

  • クライアントおよび Web サーバーは、example.com および example.net ドメインを Web サーバーの IP アドレスに解決します。

    これらのエントリーは DNS サーバーに手動で追加する必要がある点に注意してください。

手順

  1. httpd パッケージをインストールします。

    # yum install httpd
  2. /etc/httpd/conf/httpd.conf ファイルを編集します。

    1. example.com ドメインの以下の仮想ホスト設定を追加します。

      <VirtualHost *:80>
          DocumentRoot "/var/www/example.com/"
          ServerName example.com
          CustomLog /var/log/httpd/example.com_access.log combined
          ErrorLog /var/log/httpd/example.com_error.log
      </VirtualHost>

      これらの設定は以下を構成します。

      • <VirtualHost *:80> ディレクティブのすべての設定は、この仮想ホストに固有のものです。
      • DocumentRoot は、仮想ホストの Web コンテンツへのパスを設定します。
      • ServerName は、この仮想ホストがコンテンツを提供するドメインを設定します。

        複数のドメインを設定するには、ServerAlias パラメーターを設定に追加し、追加のドメインをこのパラメーターのスペースで区切ります。

      • CustomLog は、仮想ホストのアクセスログへのパスを設定します。
      • ErrorLog は、仮想ホストのエラーログへのパスを設定します。

        注記

        Apache は、ServerName パラメーターおよび ServerAlias パラメーターに設定したどのドメインにも一致しない要求にも、設定にある最初の仮想ホストを使用します。これには、サーバーの IP アドレスに送信される要求も含まれます。

  3. example.net ドメイン向けに同様の仮想ホスト設定を追加します。

    <VirtualHost *:80>
        DocumentRoot "/var/www/example.net/"
        ServerName example.net
        CustomLog /var/log/httpd/example.net_access.log combined
        ErrorLog /var/log/httpd/example.net_error.log
    </VirtualHost>
  4. 両方の仮想ホストのドキュメントルートを作成します。

    # mkdir /var/www/example.com/
    # mkdir /var/www/example.net/
  5. /var/www/内にない DocumentRoot パラメーターにパスを設定する場合は、両方のドキュメントルートに httpd_sys_content_t コンテキストを設定します。

    # semanage fcontext -a -t httpd_sys_content_t "/srv/example.com(/.*)?"
    # restorecon -Rv /srv/example.com/
    # semanage fcontext -a -t httpd_sys_content_t "/srv/example.net(/.\*)?"
    # restorecon -Rv /srv/example.net/

    以下のコマンドは、/srv/example.com/ および /srv/example.net/ ディレクトリーに httpd_sys_content_t コンテキストを設定します。

    policycoreutils-python-utils パッケージをインストールして restorecon コマンドを実行する必要があります。

  6. ローカルのファイアウォールで 80 ポートを開きます。

    # firewall-cmd --permanent --add-port=80/tcp
    # firewall-cmd --reload
  7. httpd サービスを有効にして起動します。

    # systemctl enable --now httpd

検証手順

  1. 各仮想ホストのドキュメントルートに異なるサンプルファイルを作成します。

    # echo "vHost example.com" > /var/www/example.com/index.html
    # echo "vHost example.net" > /var/www/example.net/index.html
  2. ブラウザーを使用して http://example.com に接続します。Web サーバーは、example.com 仮想ホストからのサンプルファイルを表示します。
  3. ブラウザーを使用して http://example.net に接続します。Web サーバーは、example.net 仮想ホストからのサンプルファイルを表示します。

関連情報

  • Apache 仮想ホストの設定に関する詳細は、Apache マニュアルの 仮想ホスト のドキュメントを参照してください。マニュアルのインストールの詳細は、「Apache HTTP Server の手動インストール」を参照してください。

1.6. Apache HTTP サーバーで TLS 暗号化の設定

デフォルトでは、Apache は暗号化されていない HTTP 接続を使用してクライアントにコンテンツを提供します。本セクションでは、TLS 暗号化を有効にし、Apache HTTP Server で頻繁に使用される暗号化関連の設定を行う方法を説明します。

前提条件

  • Apache HTTP Server がインストールされ、実行している。

1.6.1. Apache HTTP Server への TLS 暗号化の追加

本セクションでは、example.com ドメインの Apache HTTP Server で TLS 暗号化を有効にする方法を説明します。

前提条件

  • Apache HTTP Server がインストールされ、実行している。
  • 秘密鍵は /etc/pki/tls/private/example.com.key ファイルに保存されます。

    秘密鍵および証明書署名要求 (CSR) を作成する方法と、認証局 (CA) からの証明書を要求する方法は、CA のドキュメントを参照してください。または、お使いの CA が ACME プロトコルに対応している場合は、mod_md モジュールを使用して、TLS 証明書の取得およびプロビジョニングを自動化できます。

  • TLS 証明書は /etc/pki/tls/private/example.com.crt ファイルに保存されます。別のパスを使用する場合は、この手順の適切な手順を調整します。
  • CA 証明書は /etc/pki/tls/private/ca.crt ファイルに保存されます。別のパスを使用する場合は、この手順の適切な手順を調整します。
  • クライアントおよび Web サーバーは、サーバーのホスト名を Web サーバーのホスト名に解決します。

手順

  1. mod_ssl パッケージをインストールします。

    # dnf install mod_ssl
  2. /etc/httpd/conf.d/ssl.conf ファイルを編集し、以下の設定を <VirtualHost _default_:443> ディレクティブに追加します。

    1. サーバー名を設定します。

      ServerName example.com
      重要

      サーバー名は、証明書の Common Name フィールドに設定されているエントリーと一致している必要があります。

    2. 必要に応じて、Subject Alt Names (SAN) フィールドに追加のホスト名が含まれる場合、これらのホスト名にも TLS 暗号化を提供するように mod_ssl を設定できます。これを設定するには、ServerAliases パラメーターと対応する名前を追加します。

      ServerAlias www.example.com server.example.com
    3. 秘密鍵、サーバー証明書、および CA 証明書へのパスを設定します。

      SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key"
      SSLCertificateFile "/etc/pki/tls/certs/example.com.crt"
      SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
  3. セキュリティー上の理由から、root ユーザーのみが秘密鍵ファイルにアクセスできるように設定します。

    # chown root:root /etc/pki/tls/private/example.com.key
    # chmod 600 /etc/pki/tls/private/example.com.key
    警告

    秘密鍵に権限のないユーザーがアクセスした場合は、証明書を取り消し、新しい秘密鍵を作成し、新しい証明書を要求します。そうでない場合は、TLS 接続が安全ではなくなります。

  4. ローカルのファイアウォールでポート 443 を開きます。

    # firewall-cmd --permanent --add-port=443
    # firewall-cmd --reload
  5. httpd サービスを再起動します。

    # systemctl restart httpd
    注記

    パスワードで秘密鍵ファイルを保護した場合は、httpd サービスの起動時に毎回このパスワードを入力する必要があります。

検証手順

  • ブラウザーを使用して、https://example.com に接続します。

関連情報

  • TLS の設定に関する詳細は、Apache マニュアルの SSL/TLS 暗号化 についてのドキュメントを参照してください。マニュアルのインストールの詳細は、「Apache HTTP Server の手動インストール」を参照してください。

1.6.2. Apache HTTP サーバーでサポートされる TLS プロトコルバージョンの設定

デフォルトでは、RHEL 8 の Apache HTTP Server は、最新のブラウザーにも互換性のある安全なデフォルト値を定義するシステム全体の暗号化ポリシーを使用します。たとえば、DEFAULT ポリシーは、apache で TLSv1.2 プロトコルバージョンおよび TLSv1.3 プロトコルバージョンのみが有効になっていることを定義します。

本セクションでは、Apache HTTP Server がサポートする TLS プロトコルバージョンを手動で設定する方法を説明します。たとえば、環境が特定の TLS プロトコルバージョンのみを有効にする必要がある場合には、以下の手順に従います。

  • お使いの環境で、クライアントが弱い TLS1 (TLSv1.0) プロトコルまたは TLS1.1 プロトコルも使用できるようにする必要がある場合は、
  • Apache が TLSv1.2 プロトコルまたは TLSv1.3 プロトコルのみに対応するように設定する場合。

前提条件

手順

  1. /etc/httpd/conf/httpd.conf ファイルを編集し、TLS プロトコルバージョンを設定する <VirtualHost> ディレクティブに以下の設定を追加します。たとえば、TLSv1.3 プロトコルのみを有効にするには、以下を実行します。

    SSLProtocol -All TLSv1.3
  2. httpd サービスを再起動します。

    # systemctl restart httpd

検証手順

  1. 以下のコマンドを使用して、サーバーが TLSv1.3 に対応していることを確認します。

    # openssl s_client -connect example.com:443 -tls1_3
  2. 以下のコマンドを使用して、サーバーが TLSv1.2 に対応していないことを確認します。

    # openssl s_client -connect example.com:443 -tls1_2

    サーバーがプロトコルに対応していない場合、このコマンドは以下のエラーを返します。

    140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70
  3. 必要に応じて、他の TLS プロトコルバージョンのコマンドを繰り返し実行します。

関連情報

1.6.3. Apache HTTP サーバーで対応している暗号の設定

デフォルトでは、RHEL 8 の Apache HTTP Server は、最新のブラウザーにも互換性のある安全なデフォルト値を定義するシステム全体の暗号化ポリシーを使用します。システム全体の暗号化が許可する暗号化の一覧は、/etc/crypto-policies/back-ends/openssl.config ファイルを参照してください。

本セクションでは、Apache HTTP Server がサポートする暗号化を手動で設定する方法を説明します。お使いの環境で特定の暗号が必要な場合は、手順に従います。

前提条件

手順

  1. /etc/httpd/conf/httpd.conf ファイルを編集し、SSLCipherSuite パラメーターを、TLS 暗号を設定する <VirtualHost> ディレクティブに追加します。

    SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"

    この例では、EECDH+AESGCMEDH+AESGCMAES256+EECDH、および AES256+EDH 暗号のみを有効にし、SHA1 および SHA256 メッセージ認証コード (MAC) を使用するすべての暗号を無効にします。

  2. httpd サービスを再起動します。

    # systemctl restart httpd

検証手順

  1. Apache HTTP Server が対応するする暗号化のリストを表示するには、以下を行います。

    1. nmap パッケージをインストールします。

      # yum install nmap
    2. nmap ユーティリティーを使用して、対応している暗号を表示します。

      # nmap --script ssl-enum-ciphers -p 443 example.com
      ...
      PORT    STATE SERVICE
      443/tcp open  https
      | ssl-enum-ciphers:
      |   TLSv1.2:
      |     ciphers:
      |       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
      |       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
      |       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A
      ...

関連情報

1.7. TLS クライアント証明書認証の設定

クライアント証明書認証により、管理者は、証明書を使用して認証したユーザーのみが Web サーバーのリソースにアクセスできます。本セクションでは、/var/www/html/Example/ ディレクトリーにクライアント証明書認証を設定する方法を説明します。

Apache HTTP Server が TLS 1.3 プロトコルを使用する場合、特定のクライアントには追加の設定が必要です。たとえば、Firefox で、about:config メニューの security.tls.enable_post_handshake_auth パラメーターを true に設定します。詳細は、「Transport Layer Security version 1.3 in Red Hat Enterprise Linux 8」を参照してください。

前提条件

手順

  1. /etc/httpd/conf/httpd.conf ファイルを編集し、以下の設定をクライアント認証を設定する <VirtualHost> ディレクティブに追加します。

    <Directory "/var/www/html/Example/">
      SSLVerifyClient require
    </Directory>

    SSLVerifyClient require の設定では、/var/www/html/Example/ ディレクトリーのコンテンツにクライアントがアクセスする前に、サーバーがクライアント証明書を正常に検証する必要があることを定義します。

  2. httpd サービスを再起動します。

    # systemctl restart httpd

検証手順

  1. curl ユーティリティーを使用して、クライアント認証なしで https://example.com/Example/ URL にアクセスします。

    $ curl https://example.com/Example/
    curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0

    このエラーは、Web サーバーにクライアント証明書認証が必要であることを示しています。

  2. クライアントの秘密鍵と証明書、および CA 証明書を curl に渡して、クライアント認証で同じ URL にアクセスします。

    $ curl --cacert ca.crt --key client.key --cert client.crt https://example.com/Example/

    要求に成功すると、curl/var/www/html/Example/ ディレクトリーに保存されている index.html ファイルを表示します。

関連情報

1.8. Apache HTTP Server の手動インストール

本セクションでは、Apache HTTP Server のマニュアルをインストールする方法を説明します。本書では、以下のような詳細なドキュメントを提供します。

  • 設定パラメーターおよびディレクティブ
  • パフォーマンスチューニング
  • 認証設定
  • モジュール
  • コンテンツのキャッシュ
  • セキュリティーに関するヒント
  • TLS 暗号化の設定

マニュアルをインストールした後は、Web ブラウザーを使用して表示できます。

前提条件

  • Apache HTTP Server がインストールされ、実行している。

手順

  1. httpd-manual パッケージをインストールします。

    # yum install httpd-manual
  2. 必要に応じて、デフォルトでは、Apache HTTP Server に接続するすべてのクライアントはマニュアルを表示できます。192.0.2.0/24 サブネットなど、特定の IP 範囲へのアクセスを制限するには、/etc/httpd/conf.d/manual.conf ファイルを編集し、Require ip 192.0.2.0/24 設定を <Directory "/usr/share/httpd/manual"> ディレクティブに追加します。

    <Directory "/usr/share/httpd/manual">
    ...
        Require ip 192.0.2.0/24
    ...
    </Directory>
  3. httpd サービスを再起動します。

    # systemctl restart httpd

検証手順

  1. Apache HTTP Server のマニュアルを表示するには、Web ブラウザーで http://host_name_or_IP_address/manual/ に接続します。

1.9. モジュールの使用

httpd サービスは、モジュールアプリケーションであるため、多数の Dynamic Shared Objects (DSO) と一緒に配布されます。これは、必要に応じてランタイム時に、動的に読み込まれたり、読み込みが破棄されたりします。このモジュールは、/usr/lib64/httpd/modules/ ディレクトリーにあります。

1.9.1. モジュールの読み込み

特定の DSO モジュールを読み込むには、LoadModule ディレクティブを使用します。別のパッケージが提供するモジュールは、多くの場合、/etc/httpd/conf.modules.d/ ディレクトリーに独自の設定ファイルがあることに注意してください。

例1.1 mod_ssl DSO の読み込み

LoadModule ssl_module modules/mod_ssl.so

モジュールの読み込み後、Web サーバーを再起動して設定を再読み込みします。httpd サービスを再起動する方法は、「httpd サービスの管理」を参照してください。

1.9.2. モジュールの作成

新しい DSO モジュールを作成するには、httpd-devel パッケージがインストールされていることを確認します。これを行うには、root で以下のコマンドを実行します。

# yum install httpd-devel

このパッケージには、モジュールをコンパイルするために必要なインクルードファイル、ヘッダーファイル、および APache eXtenSion (apxs) ユーティリティーが含まれます。

作成したら、以下のコマンドでモジュールを構築できます。

# apxs -i -a -c module_name.c

ビルドが成功すると、Apache HTTP Server で配布されるその他のモジュールと同じ方法でモジュールを読み込むことができます。

1.10. Apache Web サーバー設定で秘密鍵と証明書を使用できるように NSS データベースからの証明書のエクスポート

RHEL 8 では Apache Web サーバーに mod_nss モジュールが提供されなくなります。Red Hat は mod_ssl モジュールの使用を推奨します。たとえば、RHEL 7 から RHEL 8 へ Web サーバーを移行したなどして、秘密鍵と証明書を Network Security Services (NSS) データベースに保存する場合は、以下の手順に従って、Privacy Enhanced Mail (PEM) 形式の鍵および証明書を抽出します。「Apache HTTP サーバーで TLS 暗号化の設定」に従って、mod_ssl 設定のファイルを使用できます。

この手順では、NSS データベースが /etc/httpd/alias/ に保存され、エクスポートした秘密鍵と証明書を /etc/pki/tls/ ディレクトリーに保存することを前提としています。

前提条件

  • 秘密鍵、証明書、および認証局(CA)の証明書は NSS データベースに保存されます。

手順

  1. NSS データベースの証明書を一覧表示します。

    # certutil -d /etc/httpd/alias/ -L
    Certificate Nickname           Trust Attributes
                                   SSL,S/MIME,JAR/XPI
    
    Example CA                     C,,
    Example Server Certificate     u,u,u

    次の手順では、証明書のニックネームが必要です。

  2. 秘密鍵を抽出するには、鍵を PKCS #12 ファイルに一時的にエクスポートする必要があります。

    1. 秘密鍵に関連付けられた証明書のニックネームを使用して、鍵を PKCS #12 ファイルにエクスポートします。

      # pk12util -o /etc/pki/tls/private/export.p12 -d /etc/httpd/alias/ -n "Example Server Certificate"
      Enter password for PKCS12 file: password
      Re-enter password: password
      pk12util: PKCS12 EXPORT SUCCESSFUL

      PKCS #12 ファイルにパスワードを設定する必要があります。次の手順では、このパスワードが必要です。

    2. PKCS #12 ファイルから秘密鍵をエクスポートします。

      # openssl pkcs12 -in /etc/pki/tls/private/export.p12 -out /etc/pki/tls/private/server.key -nocerts -nodes
      Enter Import Password: password
      MAC verified OK
    3. 一時 PKCS #12 ファイルを削除します。

      # rm /etc/pki/tls/private/export.p12
  3. /etc/pki/tls/private/server.key にパーミッションを設定し、root ユーザーのみがこのファイルにアクセスできるようにします。

    # chown root:root /etc/pki/tls/private/server.key
    # chmod 0600 /etc/pki/tls/private/server.key
  4. NSS データベースのサーバー証明書のニックネームを使用して CA 証明書をエクスポートします。

    # certutil -d /etc/httpd/alias/ -L -n "Example Server Certificate" -a -o /etc/pki/tls/certs/server.crt
  5. /etc/pki/tls/certs/server.crt にパーミッションを設定し、root ユーザーのみがこのファイルにアクセスできるようにします。

    # chown root:root /etc/pki/tls/certs/server.crt
    # chmod 0600 /etc/pki/tls/certs/server.crt
  6. NSS データベースの CA 証明書のニックネームを使用して、CA 証明書をエクスポートします。

    # certutil -d /etc/httpd/alias/ -L -n "Example CA" -a -o /etc/pki/tls/certs/ca.crt
  7. 「Apache HTTP サーバーで TLS 暗号化の設定」 に従って Apache Web サーバーを設定します。

    • SSLCertificateKeyFile パラメーターを /etc/pki/tls/private/server.key に設定します。
    • SSLCertificateFile パラメーターを /etc/pki/tls/certs/server.crt に設定します。
    • SSLCACertificateFile パラメーターを /etc/pki/tls/certs/ca.crt に設定します。

関連情報

  • man ページの certutil(1)
  • man ページの pk12util(1)
  • man ページの pkcs12(1ssl)

1.11. 関連情報

  • httpd(8) - httpd サービスの man ページで、コマンドラインオプションの一覧が記載されます。
  • httpd.service(8) - httpd.service ユニットファイルの man ページです。サービスのカスタマイズおよび機能強化の方法を説明します。
  • httpd.conf (5) - httpd 設定ファイルの構造と場所を説明する httpd 設定用の man ページです。
  • apachectl (8) - Apache HTTP Server の制御インターフェースの man ページです。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。