第14章 Web サーバー
14.1. Apache HTTP サーバー
httpd です。これは、Apache Software Foundation により開発されたオープンソースの Web サーバーです。
httpd サービスの設定も同様に更新する必要があります。本項では、新しく追加された機能のいくつか、 Apache HTTP Server 2.4 とバージョン 2.2 の重要な違い、古い設定ファイルの更新方法について説明します。
14.1.1. 注目すべき変更点
- httpd サービスの制御
- SysV init スクリプトからの移行に伴い、サーバー管理者は
serviceコマンドの代わりにapachectlコマンドとsystemctlコマンドを使用してサービスを制御することが推奨されます。以下の例は、httpdサービスに固有です。コマンドservice httpd graceful
は、apachectl graceful
に置き換えられます。httpd用のsystemdユニットファイルは、以下のように init スクリプトとは異なる動作をします。コマンド- サービスがリロードされると、デフォルトで正常な再起動が使用されます。
- サービスが停止されると、デフォルトで正常な停止が使用されます。
service httpd configtest
はapachectl configtest
により置き換えられます。 - Private /tmp
- システムのセキュリティーを高めるため、
systemdユニットファイルはhttpdデーモンを実行してプライベートの/tmpディレクトリーを使用します。これは、システムの/tmpディレクトリーとは別のものです。 - 設定レイアウト
- モジュールをロードする設定ファイルは、
/etc/httpd/conf.modules.d/ディレクトリーにあります。このディレクトリーには、php などの追加的にロードできるhttpd用モジュールを提供するパッケージによりファイルが配置されます。/etc/httpd/conf/httpd.confファイルのメインセクションよりも前のIncludeディレクティブは、/etc/httpd/conf.modules.d/ディレクトリー内にファイルを含めるために使用されます。つまり、conf.modules.d/内のすべての設定ファイルはhttpd.confのメイン部分よりも先に処理されます。/etc/httpd/conf.d/ディレクトリー内のファイルに対するIncludeOptionalディレクティブは、httpd.confファイルの最後に配置されます。したがって、/etc/httpd/conf.d/内のファイルは、httpd.confのメイン部分の後に処理されます。httpd パッケージ自体は、追加の設定ファイルをいくつか提供しています。/etc/httpd/conf.d/autoindex.conf: これ は mod_autoindex ディレクトリーのインデックス作成を設定します。/etc/httpd/conf.d/userdir.conf— これにより、http://example.com/~username/などのユーザーディレクトリーへのアクセスが設定されます。このようなアクセスは、デフォルトではセキュリティーのために無効になっています。/etc/httpd/conf.d/welcome.conf— 以前のリリースと同様に、コンテンツがない場合は、http://localhost/で表示される「ようこそ」ページが設定されます。
- デフォルト設定
- 最小限の
httpd.confファイルがデフォルトで提供されるようになりました。TimeoutやKeepAliveといった一般的な設定は、デフォルトでは明示的に設定されることはなくなりました。代わりに、デフォルト設定はハードコーディングされています。このハードコーディングされた全設定ディレクティブ用のデフォルト設定は、マニュアルで指定されています。詳細は、「インストールできるドキュメント」 を参照してください。 - 互換性がない構文の変更
- 既存の設定を httpd 2.2 から httpd 2.4 に移行する場合は、
httpd設定の構文に後方互換性がない複数の変更が行われため、変更が必要になります。http://httpd.apache.org/docs/2.4/upgrading.html のアップグレードの詳細については、以下の Apache ドキュメントを参照してください。 - プロセスモデル
- Red Hat Enterprise Linux の以前のリリースでは、異なる マルチプロセスモデル (MPM) が異なる
httpdバイナリーとして利用可能となっていました。つまり、分岐モデルの 「prefork」 を/usr/sbin/httpdとして、またスレッドベースのモデルである 「worker」 を/usr/sbin/httpd.workerとしてしました。Red Hat Enterprise Linux 7 では、単独のhttpdバイナリーのみが使われ、3 つの MPM はロード可能なモジュール (worker、prefork (デフォルト)、および event) として利用可能です。必要に応じて、コメント文字#を追加および削除して 3 つの MPM モジュールの 1 つだけがロードされるよう設定ファイル/etc/httpd/conf.modules.d/00-mpm.confを編集します。 - パッケージ変更
- LDAP 認証および承認の各モジュールは、個別のサブパッケージ mod_ldap で提供されています。新たなモジュール mod_session と関連のヘルパーモジュールは、新サブパッケージ mod_session で提供されています。mod_proxy_html と mod_xml2enc の新モジュールは、新サブパッケージ mod_proxy_html で提供されています。これらのパッケージはすべて Optional チャンネルにあります。
注記
Optional および Supplementary チャンネルをサブスクライブする前に、対象範囲の詳細 を確認してください。これらのチャンネルからパッケージをインストールする場合は、 Red Hat カスタマーポータルの 証明書ベースの管理を使用して、Optional および Supplementary チャンネル、-devel パッケージにアクセスする方法 の記事で説明してあるステップにしたがってください。 - ファイルシステムのレイアウトのパッケージ
/var/cache/mod_proxy/ディレクトリーは提供されなくなりました。代わりに、/var/cache/httpd/ディレクトリーがproxyおよびsslサブディレクトリーとパッケージ化されています。httpdと提供されていたパッケージ化されたコンテンツは、/var/www/から/usr/share/httpd/に移動しています。/usr/share/httpd/icons/— ディレクトリーインデックスで使用されるアイコンセットを含むディレクトリー (以前は/var/www/icons/) は/usr/share/httpd/icons/に変更されました。デフォルト設定ではhttp://localhost/icons/で利用可能です。アイコンの場所と利用可能性は、/etc/httpd/conf.d/autoindex.confファイルで設定可能です。/usr/share/httpd/manual/—/var/www/manual/は/usr/share/httpd/manual/に変更されました。httpd-manual パッケージに含まれるこのディレクトリーにはhttpdの HTML バージョンのマニュアルが含まれます。このパッケージがインストールされている場合は、http://localhost/manual/で利用可能です。マニュアルの場所と利用可能性は/etc/httpd/conf.d/manual.confファイルで設定可能です。usr/share/httpd/error/:/var/www/error/は/usr/share/httpd/error/に移動しました。カスタムの複数言語の HTTP エラーページです。デフォルトでは設定されておらず、設定ファイルの例は/usr/share/doc/httpd-VERSION/httpd-multilang-errordoc.confで提供されています。
- 認証、認可、およびアクセス制御
- 認証や認可、さらにはアクセス制御に使用される設定ディレクティブは、大幅に変更されました。
Order、DenyおよびAllowの各ディレクティブを使用している既存の設定ファイルは、新たなRequire構文を使うようにしてください。詳細は、http://httpd.apache.org/docs/2.4/howto/auth.html の Apache ドキュメントを参照してください。 - suexec
- システムのセキュリティーを改善するために、suexec バイナリーは
rootでインストールされなくなりました。代わりに、ファイルシステム機能ビットセットにより、限定的なパーミッションセットを許可できます。この変更と共に、suexec バイナリーは/var/log/httpd/suexec.logログファイルを使わないようになりました。代わりに、ログメッセージは syslog に送信されます。デフォルトでは、これらのメッセージは/var/log/secureログファイルに表示されます。 - モジュールインターフェース
httpdモジュールインターフェースの変更のため、httpd 2.2 に対して構築されたサードパーティーのバイナリーモジュールは、httpd 2.4 と互換性がありません。このようなモジュールは、必要に応じて httpd 2.4 モジュールインターフェース用に調整し、再構築する必要があります。バージョン2.4の API 変更の詳細な一覧は、http://httpd.apache.org/docs/2.4/developer/new_api_2_4.html で参照できます。ソースからのモジュール構築に使用される apxs バイナリーは、/usr/sbin/apxsから/usr/bin/apxsに移動しました。- 削除されたモジュール
- Red Hat Enterprise Linux 7 で削除された
httpdモジュールは以下のとおりです。- mod_auth_mysql、mod_auth_pgsql
- httpd 2.4 は、mod_authn_dbd モジュールで SQL データベース認証サポートを内部で提供します。
- mod_perl
- mod_perl はアップストリームでは、httpd 2.4 で公式にサポートされていません。
- mod_authz_ldap
- httpd 2.4 は、mod_authnz_ldap を使用してサブパッケージ mod_ldap の LDAP サポートを提供します。
14.1.2. 設定の更新
- モジュールは変更されている可能性があるため、すべてのモジュール名が正しいことを確認してください。名前変更されたモジュールそれぞれについて
LoadModuleディレクティブを調節します。 - サードパーティーのモジュールは読み込みを試行する前にすべて再コンパイルをします。これは一般的に認証と権限付与のモジュールに該当します。
- Apache HTTP Secure Server を使用する場合は、Secure Sockets Layer (SSL) プロトコルの有効化に関する重要な情報について 「mod_ssl モジュールの有効化」 を参照してください。
~]# apachectl configtest
Syntax OK14.1.3. httpd サービスの実行
httpd サービスを有効にするには、まず httpd がインストールされていることを確認します。以下のコマンドを使用します。
~]# yum install httpd14.1.3.1. サービスの起動
httpd サービスを実効するには、シェルプロンプトで root として以下のコマンドを入力します。
~]# systemctl start httpd.service~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.注記
14.1.3.2. サービスの停止
httpd サービスを停止するには、シェルプロンプトで root として以下を入力します。
~]# systemctl stop httpd.service~]# systemctl disable httpd.service
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.14.1.3.3. サービスの再起動
httpd サービスを再起動する方法は、3 通りあります。
- サービスを完全に再起動するには、
rootで以下のコマンドを入力します。~]#
systemctl restart httpd.serviceこれで実行中のhttpdサービスが停止し、直ちに再起動します。このコマンドは、PHP のような動的に読み込まれたモジュールをインストールもしくは削除した後に使ってください。 - 設定のリロードだけを行うには、
rootで以下のコマンドを入力します。~]#
systemctl reload httpd.serviceこれで実行中のhttpdサービスが設定ファイルを再読み込みします。現在プロセス中の要求はいずれも割り込みされるので、クライアントのブラウザーがエラーメッセージを表示したり、ページの一部のみが表示される可能性があります。 - アクティブな要求に影響を与えずに設定をリロードするには、
rootで以下のコマンドを入力します。~]#
apachectl gracefulこれにより、実行中のhttpdサービスは設定ファイルをリロードします。現在処理中の要求は、いずれも古い設定を使用し続けます。
14.1.4. 設定ファイルの編集
httpd サービスは開始後にデフォルトで、表14.1「httpd サービスの設定ファイル」 に一覧表示してある場所から設定を読み取ります。
表14.1 httpd サービスの設定ファイル
httpd サービスの再起動方法の詳細については 「サービスの再起動」 を参照してください。
~]# apachectl configtest
Syntax OK14.1.5. モジュールを使った作業
httpd サービスは、必要に応じて実行時に動的にロードまたはアンロードできる複数の Dynamic Shared Objects (動的共有オブジェクト) (DSO) と一緒に配布されます。Red Hat Enterprise Linux 7 では、これらのモジュールは /usr/lib64/httpd/modules/ 内に配置されています。
14.1.5.1. モジュールのロード
LoadModule ディレクティブを使用します。個別のパッケージで提供されるモジュールでは多くの場合、設定ファイルが /etc/httpd/conf.d/ ディレクトリーにあることに注意してください。
例14.1 mod_ssl DSO のロード
LoadModule ssl_module modules/mod_ssl.so
httpd サービスの再起動の方法については 「サービスの再起動」 を参照してください。
14.1.5.2. モジュールの書き込み
root で以下のコマンドを入力します。
~]# yum install httpd-develapxs) ユーティリティーが含まれています。
~]# apxs -i -a -c module_name.c14.1.6. 仮想ホストのセットアップ
/usr/share/doc/httpd-VERSION/httpd-vhosts.conf を /etc/httpd/conf.d/ ディレクトリーにコピーし、@@Port@@ と @@ServerRoot@@ のプレースホルダーの値を置き換えます。例14.2「仮想ホスト設定のサンプル」 にあるように、実際の要件に合わせてオプションをカスタマイズします。
例14.2 仮想ホスト設定のサンプル
<VirtualHost *:80>
ServerAdmin webmaster@penguin.example.com
DocumentRoot "/www/docs/penguin.example.com"
ServerName penguin.example.com
ServerAlias www.penguin.example.com
ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
</VirtualHost>ServerName はマシンに割り当てられている有効な DNS 名である必要があることに注意してください。<VirtualHost> コンテナーは高度にカスタマイズ可能で、メインサーバー設定内で利用できるほとんどのディレクティブを受け付けます。このコンテナー内でサポートされていないディレクティブには User と Group があり、これらは SuexecUserGroup に置き換えられています。
注記
/etc/httpd/conf/httpd.conf ファイルのグローバル設定で Listen ディレクティブを適切に更新することを忘れないでください。
httpd サービスを再起動する方法については、「サービスの再起動」 を参照してください。
14.1.7. SSL サーバーのセットアップ
mod_ssl と共に、一般的に SSL サーバーと呼ばれます。また、Red Hat Enterprise Linux は、TLS 実装としての Mozilla NSS の使用をサポートします。Mozilla NSS のサポートは mod_nss モジュールにより提供されます。
14.1.7.1. 証明書とセキュリティーの概要
表14.2 一般的な Web ブラウザーで使用される CA 一覧に関する情報
| ウェブブラウザー | リンク |
|---|---|
| Mozilla Firefox | Mozilla root CA 一覧 |
| Opera | Opera により使用されるルート証明書に関する情報。 |
| Internet Explorer | Microsoft Windows で使用されるルート証明書に関する情報。 |
| Chromium | Chromium プロジェクトにより使用されるルート証明書に関する情報。 |
14.1.8. mod_ssl モジュールの有効化
mod_ssl を使用して SSL または HTTPS サーバーをセットアップする場合は、別のアプリケーションまたはモジュール (mod_nss など) で同じポートを使用するよう設定できません。HTTPS のデフォルトポートはポート 443 です。
mod_ssl モジュールと OpenSSL ツールキットを使用して SSL サーバーをセットアップするには、mod_ssl および openssl パッケージをインストールします。root で以下のコマンドを入力します。
~]# yum install mod_ssl openssl/etc/httpd/conf.d/ssl.conf に mod_ssl 設定ファイルが作成されます。このモジュールを読み込むには、「サービスの再起動」 にあるように httpd サービスを再起動します。
重要
SSL を無効にし、TLSv1.1 または TLSv1.2 のみを使用することを推奨します。後方互換性は、TLSv1.0 を使用して実現できます。Red Hat がサポートする多くの製品は SSLv2 または SSLv3 プロトコルを使用するか、デフォルトでそれらのプロトコルを有効にできます。ただし、SSLv2 または SSLv3 を使用することが強く推奨されます。
14.1.8.1. mod_ssl での SSL および TLS の有効化および無効化
SSLProtocol ディレクティブを追加し、他のすべての部分でそのディレクティブを削除するか、すべての 「VirtualHost」 セクションの 「# SSL Protocol support」 の下にあるデフォルトエントリーを編集することによりグローバルで設定します。ドメインごとの VirtualHost セクションで指定しない場合、設定はグローバルセクションから継承されます。プロトコルバージョンが確実に無効になるように、管理者は SSLProtocol を、「SSL Global Context」 セクションでのみ指定するか、ドメインごとのすべての VirtualHost セクションで指定する必要があります。
手順14.1 SSLv2 および SSLv3 の無効化
rootで/etc/httpd/conf.d/ssl.confファイルを開き、SSLProtocolディレクティブのすべてのインスタンスを検索します。デフォルトでは、設定ファイルに以下のような 1 つのセクションが含まれます。~]#
このセクションは、VirtualHost セクション内にあります。vi /etc/httpd/conf.d/ssl.conf# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2SSLProtocol行を以下のように編集します。# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2 -SSLv3
すべての VirtualHost セクションに対してこのアクションを繰り返します。ファイルを保存し、閉じます。- すべての
SSLProtocolディレクティブが以下のように変更されたことを確認します。~]#
この手順は、デフォルトの VirtualHost セクションが複数の場合に特に重要になります。grep SSLProtocol /etc/httpd/conf.d/ssl.confSSLProtocol all -SSLv2 -SSLv3 - Apache デーモンを以下のように再起動します。
~]#
すべてのセッションが中断されることに注意してください。systemctl restart httpd
手順14.2 TLS 1 以上を除くすべての SSL および TLS プロトコルの無効化
rootで/etc/httpd/conf.d/ssl.confファイルを開き、SSLProtocolディレクティブのすべてのインスタンスを検索します。デフォルトでは、設定ファイルに以下のような 1 つのセクションが含まれます。~]#
vi /etc/httpd/conf.d/ssl.conf# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2SSLProtocol行を以下のように編集します。# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2
ファイルを保存してから閉じます。- 以下のように変更を確認します。
~]#
grep SSLProtocol /etc/httpd/conf.d/ssl.confSSLProtocol -all +TLSv1 +TLSv1.1 +TLSv1.2 - Apache デーモンを以下のように再起動します。
~]#
すべてのセッションが中断されることに注意してください。systemctl restart httpd
手順14.3 SSL および TLS プロトコルのステータスのテスト
openssl s_client -connect コマンドを使用します。コマンドの形式は以下のようになります。openssl s_client -connect hostname:port -protocolここで、port はテストするポートであり、protocol はテストするプロトコルバージョンです。ローカルで実行されている SSL サーバーをテストするには、ホスト名として
localhost を使用します。たとえば、SSLv3 が有効であるかどうかを確認するためにセキュアな HTTPS 接続のデフォルトポートであるポート 443 をテストするには、以下のようにコマンドを発行します。
~]#
上記の出力は、ハンドシェイクが失敗し、暗号化がネゴシエートされなかったことを示しています。openssl s_client -connect localhost:443 -ssl3CONNECTED(00000003) 139809943877536:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1257:SSL alert number 40 139809943877536:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:出力省略 New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3出力省略~]$
上記の出力は、ハンドシェイクが失敗せず、暗号化セットがネゴシエートされたことを示しています。openssl s_client -connect localhost:443 -tls1_2CONNECTED(00000003) depth=0 C = --, ST = SomeState, L = SomeCity, O = SomeOrganization, OU = SomeOrganizationalUnit, CN = localhost.localdomain, emailAddress = root@localhost.localdomain出力省略 New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2出力省略
openssl s_client コマンドオプションは、s_client(1) man ページで文書化されています。
14.1.9. mod_nss Module の有効化
mod_nss を使用して HTTPS サーバーをセットアップする場合は、mod_ssl がデフォルトで 443 (デフォルトの HTTPS ポート) を使用するため、mod_ssl パッケージをデフォルト設定でインストールできません。可能な限り、このパッケージを削除します。
root で以下のコマンドを入力します。
~]# yum remove mod_ssl注記
mod_ssl が必要な場合は、443 以外のポートを使用するよう /etc/httpd/conf.d/ssl.conf を変更して、リッスンするポートが 443 に変更されたときに mod_ssl と mod_nss が競合しないようにします。
mod_nss と mod_ssl は、異なるポートを使用する場合のみ共存できます。このため、mod_nss はデフォルトで 8443 を使用しますが、HTTPS のデフォルトポートはポート 443 です。ポートは Listen ディレクティブと VirtualHost 名またはアドレスで指定されます。
手順14.4 mod_nss の設定
rootで mod_nss をインストールします。~]#
yum install mod_nssこれにより、/etc/httpd/conf.d/nss.confにmod_nss設定ファイルが作成されます。/etc/httpd/conf.d/ディレクトリーは、デフォルトでメインの Apache HTTP Server 設定ファイルに含まれます。モジュールをロードするには、「サービスの再起動」 で説明されているようにhttpdサービスを再起動します。rootで/etc/httpd/conf.d/nss.confファイルを開き、Listenディレクティブのすべてのインスタンスを検索します。Listen 8443行を以下のように編集します。Listen 443
ポート443はHTTPSのデフォルトポートです。- デフォルトの
VirtualHost _default_:8443行を以下のように編集します。VirtualHost _default_:443
デフォルト以外の他のすべての仮想ホストセクション (存在する場合) を編集します。ファイルを保存し、閉じます。 - Mozilla NSS では、証明書は
/etc/httpd/conf.d/nss.confファイルのNSSCertificateDatabaseディレクティブで指定されたサーバー証明書データベースに保存されます。デフォルトでは、パスはインストール時に作成された NSS データベースである/etc/httpd/aliasに設定されます。デフォルトの NSS データベースを表示するには、以下のコマンドを実行します。~]#
上記のコマンド出力で、certutil -L -d /etc/httpd/aliasCertificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI cacert CTu,Cu,Cu Server-Cert u,u,u alpha u,pu,uServer-CertはデフォルトのNSSNicknameです。-Lオプションは、証明書データベース内のすべての証明書を一覧表示するか、指定された証明書に関する情報を表示します。-dオプションは、証明書およびキーデータベースファイルを含むデータベースディレクトリーを指定します。その他のコマンドラインオプションについては、certutil(1)man ページを参照してください。 - 別のデータベースを使用するよう mod_nss を設定するには、
/etc/httpd/conf.d/nss.confファイルのNSSCertificateDatabase行を編集します。デフォルトファイルの VirtualHost セクション内には以下の行が含まれます。# Server Certificate Database: # The NSS security database directory that holds the certificates and # keys. The database consists of 3 files: cert8.db, key3.db and secmod.db. # Provide the directory that these files exist. NSSCertificateDatabase /etc/httpd/alias
上記のコマンド出力で、aliasはデフォルトの NSS データベースディレクトリーである/etc/httpd/alias/です。 - デフォルトの NSS 証明書データベースにパスワードを適用するには、
rootで以下のコマンドを使用します。~]#
certutil -W -d /etc/httpd/aliasEnter Password or Pin for "NSS Certificate DB": Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: Re-enter password: Password changed successfully. - HTTPS サーバーをデプロイする前に、認証局 (CA) により署名された証明書を使用して新しい証明書データベースを作成します。
例14.3 Mozilla NSS データベースへの証明書の追加
certutilコマンドは、CA 証明書を NSS データベースファイルに追加するために使用されます。certutil-d/etc/httpd/nss-db-directory/-A-n"CA_certificate"-tCT,,-a-icertificate.pem上記のコマンドは、certificate.pem という名前の PEM 形式のファイル に保存されている CA 証明書を追加します。-dオプションは証明書およびキーデータベースファイルを含む NSS データベースディレクトリーを指定し、-nオプションは証明書の名前を設定します。-tCT,,は、証明書が TLS クライアントおよびサーバーでの使用に信頼できることを意味します。-Aオプションは既存の証明書を証明書データベースに追加します。データベースは、存在しない場合は作成されます。-aオプションは出入力での ASCII 形式の使用を可能にします。-iオプションは、certificate.pem入力ファイルをコマンドに渡します。他のコマンドラインオプションについては、certutil(1)man ページを参照してください。 - 秘密鍵を保護するために、NSS データベースはパスワードで保護する必要があります。
例14.4 Mozilla NSS データベースのパスワード設定
NSS データベースのパスワードを設定するには、以下のようにcertutilツールを使用できます。certutil -W -d /etc/httpd/nss-db-directory/
たとえば、デフォルトのデータベースの場合は、rootで以下のコマンドを実行します。~]#
certutil -W -d /etc/httpd/aliasEnter Password or Pin for "NSS Certificate DB": Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: Re-enter password: Password changed successfully. - 以下のように行を
NSSPassPhraseDialogディレクティブで変更して、NSS 内部ソフトウェアトークンを使用するようmod_nssを設定します。~]#
これにより、システムの起動時にパスワードを手動で入力する必要がなくなります。ソフトウェアトークンは NSS データベースに存在しますが、証明書を含む物理トークンを使用することもできます。vi /etc/httpd/conf.d/nss.confNSSPassPhraseDialog file:/etc/httpd/password.conf - NSS データベースに含まれる SSL サーバー証明書が RSA 証明書である場合は、
NSSNicknameパラメーターをコメント解除し、パラメーターが上記の手順 4 で示されたニックネームに一致するようにしてください。~]#
vi /etc/httpd/conf.d/nss.confNSSNickname Server-CertNSS データベースに含まれる SSL サーバー証明書が ECC 証明書である場合は、NSSECCNicknameパラメーターがコメント解除され、上記の手順 4 で示されたニックネームに一致するようにします。~]#
vi /etc/httpd/conf.d/nss.confNSSECCNickname Server-CertNSSCertificateDatabaseパラメーターがコメント解除され、上記の手順 4 で示された、または手順 5 で設定された NSS データベースディレクトリーを参照するようにします。~]#
vi /etc/httpd/conf.d/nss.confNSSCertificateDatabase /etc/httpd/alias/etc/httpd/aliasを、使用する証明書データベースへのパスに置き換えます。 rootで/etc/httpd/password.confファイルを作成します。~]#
以下の形式の行を追加します。vi /etc/httpd/password.confinternal:password
password を、上記の手順 6 で NSS セキュリティーデータベースに適用されたパスワードに置き換えます。- 適切な所有権とパーミッションを
/etc/httpd/password.confファイルに適用します。~]#
chgrp apache /etc/httpd/password.conf~]#chmod 640 /etc/httpd/password.conf~]#ls -l /etc/httpd/password.conf-rw-r-----. 1 root apache 10 Dec 4 17:13 /etc/httpd/password.conf - NSS ソフトウェアトークンを使用するよう
/etc/httpd/password.confでmod_nssを設定するには、/etc/httpd/conf.d/nss.confを以下のように編集します。~]#
vi /etc/httpd/conf.d/nss.conf - 変更を反映するために、「サービスの再起動」 で説明されているように Apache サーバーを再起動します。
重要
SSL を無効にし、TLSv1.1 または TLSv1.2 のみを使用することを推奨します。後方互換性は、TLSv1.0 を使用して実現できます。Red Hat がサポートする多くの製品は SSLv2 または SSLv3 プロトコルを使用するか、デフォルトでそれらのプロトコルを有効にできます。ただし、SSLv2 または SSLv3 を使用することが強く推奨されます。
14.1.9.1. mod_nss での SSL および TLS の有効化および無効化
NSSProtocol ディレクティブを追加し、他のすべての部分でそのディレクティブを削除するか、すべての 「VirtualHost」 セクションの 「# SSL Protocol」 の下にあるデフォルトエントリーを編集することによりグローバルで設定します。ドメインごとの VirtualHost セクションで指定しない場合、設定はグローバルセクションから継承されます。プロトコルバージョンが確実に無効になるように、管理者は NSSProtocol を、「SSL Global Context」 セクションでのみ指定するか、ドメインごとのすべての VirtualHost セクションで指定する必要があります。
手順14.5 mod_nss での TLS 1 以上を除くすべての SSL および TLS プロトコルの無効化
rootで/etc/httpd/conf.d/nss.confファイルを開き、NSSProtocolディレクティブのすべてのインスタンスを検索します。デフォルトでは、設定ファイルに以下のような 1 つのセクションが含まれます。~]#
このセクションは、VirtualHost セクション内にあります。vi /etc/httpd/conf.d/nss.conf# SSL Protocol:出力省略 # Since all protocol ranges are completely inclusive, and no protocol in the # middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1" # is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1". NSSProtocol SSLv3,TLSv1.0,TLSv1.1NSSProtocol行を以下のように編集します。# SSL Protocol: NSSProtocol TLSv1.0,TLSv1.1
すべての VirtualHost セクションに対してこのアクションを繰り返します。Listen 8443行を以下のように編集します。Listen 443
- デフォルトの
VirtualHost _default_:8443行を以下のように編集します。VirtualHost _default_:443
デフォルト以外の他のすべての仮想ホストセクション (存在する場合) を編集します。ファイルを保存し、閉じます。 - すべての
NSSProtocolディレクティブが以下のように変更されたことを確認します。~]#
この手順は、 VirtualHost セクションが複数の場合に特に重要になります。grep NSSProtocol /etc/httpd/conf.d/nss.conf# middle of a range may be excluded, the entry "NSSProtocol SSLv3,TLSv1.1" # is identical to the entry "NSSProtocol SSLv3,TLSv1.0,TLSv1.1". NSSProtocol TLSv1.0,TLSv1.1 - Apache デーモンを以下のように再起動します。
~]#
すべてのセッションが中断されることに注意してください。service httpd restart
手順14.6 mod_nss での SSL および TLS プロトコルのステータスのテスト
openssl s_client -connect コマンドを使用します。root で openssl パッケージをインストールします。
~]# yum install openssl
openssl s_client -connect コマンドの形式は以下のようになります。openssl s_client -connect hostname:port -protocolここで、port はテストするポートであり、protocol はテストするプロトコルバージョンです。ローカルで実行されている SSL サーバーをテストするには、ホスト名として
localhost を使用します。たとえば、SSLv3 が有効であるかどうかを確認するためにセキュアな HTTPS 接続のデフォルトポートであるポート 443 をテストするには、以下のようにコマンドを発行します。
~]#
上記の出力は、ハンドシェイクが失敗し、暗号化がネゴシエートされなかったことを示しています。openssl s_client -connect localhost:443 -ssl3CONNECTED(00000003) 3077773036:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:337:出力省略 New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : SSLv3出力省略~]$
上記の出力は、ハンドシェイクが失敗せず、暗号化セットがネゴシエートされたことを示しています。openssl s_client -connect localhost:443 -tls1CONNECTED(00000003) depth=1 C = US, O = example.com, CN = Certificate Shack出力省略 New, TLSv1/SSLv3, Cipher is AES128-SHA Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1出力省略
openssl s_client コマンドオプションは、s_client(1) man ページで文書化されています。
14.1.10. 既存の鍵と証明書の使用
- IP アドレスまたはドメイン名を変更しているケース。証明書は特定の IP アドレスとドメイン名のペアに発行されるものです。これらの値のどちらかが変更されると証明書は無効になります。
- VeriSign からの証明書があって、サーバーソフトウェアを変更しているケース。広く使用されている認証局である VeriSign は、特定のソフトウェア製品、IP アドレス、およびドメイン名に証明書を発行します。ソフトウェア製品を変更すると証明書が無効になります。
/etc/pki/tls/private/ ディレクトリーと /etc/pki/tls/certs/ ディレクトリーにそれぞれ移動します。これを行うには root で以下のコマンドを入力します。
~]#mvkey_file.key/etc/pki/tls/private/hostname.key~]#mvcertificate.crt/etc/pki/tls/certs/hostname.crt
/etc/httpd/conf.d/ssl.conf 設定ファイルに追加します。
SSLCertificateFile /etc/pki/tls/certs/hostname.crt SSLCertificateKeyFile /etc/pki/tls/private/hostname.key
httpd サービスを再起動します。
例14.5 Red Hat セキュアウェブサーバーからの鍵と証明書の使用
~]#mv /etc/httpd/conf/httpsd.key /etc/pki/tls/private/penguin.example.com.key~]#mv /etc/httpd/conf/httpsd.crt /etc/pki/tls/certs/penguin.example.com.crt
14.1.11. 新しい鍵と証明書の生成
root で以下のコマンドを入力します。
~]# yum install crypto-utils重要
root でカスタムのシリアル番号で新規の証明書を作成するには、genkey の代わりに、以下のコマンドを使用します。
~]# openssl req -x509 -new -set_serial number -key hostname.key -out hostname.crt注記
root で以下のコマンドを使用して既存のファイルを削除します。
~]# rm /etc/pki/tls/private/hostname.keyroot でgenkey コマンドの後に該当するホスト名 (たとえば、penguin.example.com) を付けて使用します。
~]# genkey hostname- 鍵と証明書を保存する場所を確認します。

図14.1 genkey ユーティリティーの実行
Tab キーを使用して ボタンを選択してから、Enter キーを押すと次の画面を進みます。 - up と down の矢印キーを使用して、適切な鍵のサイズを選択します。大きな鍵はセキュリティーを向上させますが、サーバーの応答時間も長くなることに注意してください。NIST では、
2048 bitsの使用を推奨しています。『NIST Special Publication 800-131A』 を参照してください。
図14.2 鍵のサイズ選択
終了したら、Tab キーを使用して ボタンを選択して Enter キーを押すと、ランダムなビットの生成プロセスが開始します。選択した鍵のサイズによっては、これに時間がかかりることもあります。 - 証明書要求を認証局に送信するかどうかを決定します。

図14.3 証明書要求の生成
Tab キーを使用して を選択し、証明書要求を組み立てるか、または を選択して、自己署名の証明書を生成します。その後に、Enter を押して選択を確定します。 - Spacebar (スペースバー) キーを使用すると、秘密鍵の暗号化を有効にする (
[*]) か、無効にする ([ ]) 選択ができます。
図14.4 秘密鍵の暗号化
Tab キーを使用して ボタンを選択してから、Enter キーを押すと次の画面を進みます。 - 秘密鍵の暗号化を有効にしている場合は、適切なパスフレーズを入力します。セキュリティーの理由により入力時には文字が表示されませんが、最低でも 5 文字の長さが必要です。

図14.5 パスフレーズの入力
Tab キーを使用して ボタンを選択してから、Enter キーを押すと次の画面を進みます。重要
サーバーを開始するには正しいパスフレーズの入力が必要です。それを紛失したり忘れたりした場合は、新しい鍵と証明書を生成しなければなりません。 - 証明書詳細のカスタマイズ

図14.6 証明書情報の指定
Tab キーを使用して ボタンを選択します。それから Enter を押すと鍵の生成が完了します。 - 以前に証明書要求の生成を有効にしていた場合は、それを認証局に送信するようにプロンプトされます。

図14.7 証明書要求を送信する方法の指示
Enter を押してシェルプロンプトに戻ります。
/etc/httpd/conf.d/ssl.conf 設定ファイルに追加します。
SSLCertificateFile /etc/pki/tls/certs/hostname.crt SSLCertificateKeyFile /etc/pki/tls/private/hostname.key
httpd サービスを再起動します。すると更新された設定が読み込まれます。
14.1.12. コマンドラインを使用した HTTP および HTTPS 用ファイアウォールの設定
HTTP および HTTPS トラフィックが許可されません。システムが Web サーバーとして機能できるようにするには、firewalld のサポートされたサービスを使用して HTTP および HTTPS トラフィックが必要に応じてファイアウォールを通過できるようにします。
HTTP を有効にするには、root で以下のコマンドを発行します。
~]# firewall-cmd --add-service http
success
HTTPS を有効にするには、root で以下のコマンドを発行します。
~]# firewall-cmd --add-service https
success
--permanent オプションを追加してコマンドを繰り返します。
14.1.12.1. コマンドラインを使用した受信 HTTP および HTTPS 向けネットワークアクセスの設定
root で以下のコマンドを実行します。
~]# firewall-cmd --list-all
public (default, active)
interfaces: em1
sources:
services: dhcpv6-client ssh出力省略
デフォルトインストールのこの例では、ファイアウォールは有効ですが、HTTP および HTTPS は通過を許可されていません。
HTTP および HTTP ファイアウォールサービスが有効になると、以下のような services 行が現れます。
services: dhcpv6-client http https ssh
firewalld でのポートのオープンおよびクローズの詳細については、Red Hat Enterprise Linux 7 Security Guide を参照してください。
14.1.13. 関連資料
インストールされているドキュメント
httpd(8)— コマンドラインオプションの全一覧が含まれているhttpdサービスの man ページです。genkey(1)— crypto-utils パッケージにより提供されるgenkeyユーティリティーの man ページです。apachectl(8)— Apache HTTP サーバー制御インターフェースの man ページです。
インストールできるドキュメント
- http://localhost/manual/ — ディレクティブと利用可能なモジュールの全説明を含む Apache HTTP サーバーの公式ドキュメントです。このドキュメントにアクセスするには、httpd-manual パッケージがインストールしてあり、Web サーバーが稼働している必要があります。ドキュメントにアクセスする前に、
rootで以下のコマンドを実行します。~]#
yum install httpd-manual~]#apachectl graceful
オンラインのドキュメント
- http://httpd.apache.org/ — すべてのディレクティブとデフォルトのモジュールに関するドキュメントが収納された、Apache HTTP サーバーの公式 Web サイトです。
- http://www.openssl.org/: さらに詳しいドキュメントや FAQ、メーリングリストへのリンク、その他役立つリソースを掲載した OpenSSL のホームページです。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.