ウェブサイト検索

RHCEシリーズ:Apache用のネットワークセキュリティサービス(NSS)を使用したTLSによるHTTPSの実装 - パート8


もしあなたがウェブサーバーの維持とセキュリティを担当しているシステム管理者であるなら、サーバーを通過するデータが常に保護されるように最善の努力をしないわけにはいきません。

ウェブクライアントとサーバー間でより安全な通信を提供するために、HTTPSプロトコルはHTTPとSSL(セキュアソケットレイヤー)または最近のTLS(トランスポートレイヤーセキュリティ)の組み合わせとして生まれました。

深刻なセキュリティ侵害のため、SSL はより堅牢な TLS に取って代わられました。そのため、この記事では、TLSを使用してウェブサーバーとクライアント間の接続を安全にする方法について説明します。

このチュートリアルは、既にApacheウェブサーバーをインストールし、設定していることを前提としています。もしそうでない場合は、先にこのサイトの関連する記事を参照してください。

  1. RHEL/CentOS 7にLAMP(Linux、MySQL/MariaDB、Apache、PHP)をインストールする

OpenSSLとユーティリティのインストール

まず、Apache が実行されていて、http と https がファイアウォールを通過することが許可されていることを確認してください:


systemctl start http
systemctl enable http
firewall-cmd --permanent –-add-service=http
firewall-cmd --permanent –-add-service=https

次に、必要なパッケージをインストールします:


yum update && yum install openssl mod_nss crypto-utils

重要: 上のコマンドで mod_nss を mod_ssl に置き換えることができます。つまり、NSS(ネットワークセキュリティサービス)の代わりに OpenSSL ライブラリを使用して TLS を実装することができます(どちらを使用するかは完全にあなた次第ですが、この記事ではより堅牢なために NSS を使用します。例えば、PKCS #11 のような最近の暗号化標準をサポートしています)。

最後に、mod_nssを使用することにした場合はmod_sslをアンインストールしてください。その逆の場合も同様です。


yum remove mod_ssl

NSS(ネットワークセキュリティサービス)の設定

mod_nssがインストールされると、そのデフォルトの設定ファイルが/etc/httpd/conf.d/nss.confとして作成されます。次に、すべてのListenおよびVirtualHostディレクティブがポート443(HTTPSのデフォルトポート)を指していることを確認してください。


Listen 443
VirtualHost _default_:443

その後、Apacheを再起動し、mod_nssモジュールが読み込まれているか確認してください:


apachectl restart
httpd -M | grep nss

次に、/etc/httpd/conf.d/nss.conf 設定ファイルに以下の編集を行う必要があります:

1. NSSデータベースディレクトリを指定してください。デフォルトのディレクトリを使用するか、新しいものを作成できます。このチュートリアルではデフォルトを使用します:


NSSCertificateDatabase /etc/httpd/alias

2. 各システムの起動時に手動でパスフレーズを入力するのを避けるために、/etc/httpd/nss-db-password.conf にパスワードをデータベースディレクトリに保存します:


NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

/etc/httpd/nss-db-password.conf の中に次の1行だけが含まれ、mypassword は後でNSSデータベースのために設定するパスワードです。


internal:mypassword

さらに、その権限と所有権はそれぞれ0640およびroot:apacheに設定する必要があります:


chmod 640 /etc/httpd/nss-db-password.conf
chgrp apache /etc/httpd/nss-db-password.conf

3. Red Hatは、POODLE SSLv3の脆弱性のため、SSLおよびTLSのすべてのバージョンをTLSv1.0以前に無効にすることを推奨しています(詳細はこちら)。

すべてのNSSProtocolディレクティブのインスタンスが以下のように読み取られることを確認してください(他の仮想ホストをホストしていない場合、1つしか見つからない可能性があります):


NSSProtocol TLSv1.0,TLSv1.1

4. Apacheは自己署名証明書であり、発行者を有効として認識しないため、再起動を拒否します。このため、この特定のケースでは次を追加する必要があります:


NSSEnforceValidCerts off

5. 厳密には必要ありませんが、NSSデータベースにパスワードを設定することは重要です。


certutil -W -d /etc/httpd/alias

関連記事: