1.9. Apache HTTP サーバーで TLS 暗号化の設定
デフォルトでは、Apache は暗号化されていない HTTP 接続を使用してクライアントにコンテンツを提供します。このセクションでは、TLS 暗号化を有効にし、Apache HTTP Server で頻繁に使用される暗号化関連の設定を行う方法を説明します。
前提条件
- Apache HTTP Server がインストールされ、実行している。
1.9.1. Apache HTTP Server への TLS 暗号化の追加
example.com
ドメインの Apache HTTP サーバーで TLS 暗号化を有効にすることができます。
前提条件
- Apache HTTP Server がインストールされ、実行している。
秘密鍵が
/etc/pki/tls/private/example.com.key
ファイルに保存されている。秘密鍵および証明書署名要求 (CSR) を作成する方法と、認証局 (CA) からの証明書を要求する方法は、CA のドキュメントを参照してください。または、お使いの CA が ACME プロトコルに対応している場合は、
mod_md
モジュールを使用して、TLS 証明書の取得およびプロビジョニングを自動化できます。-
TLS 証明書は
/etc/pki/tls/certs/example.com.crt
ファイルに保存されます。別のパスを使用する場合は、この手順で対応する手順を調整します。 -
認証局証明書は
/etc/pki/tls/certs/ca.crt
に保存されています。別のパスを使用する場合は、この手順で対応する手順を調整します。 - クライアントおよび Web サーバーは、サーバーのホスト名を Web サーバーの IP アドレスに対して解決します。
手順
mod_ssl
パッケージをインストールします。# yum install mod_ssl
/etc/httpd/conf.d/ssl.conf
ファイルを編集し、以下の設定を<VirtualHost _default_:443>
ディレクティブに追加します。サーバー名を設定します。
ServerName example.com
重要サーバー名は、証明書の
Common Name
フィールドに設定されているエントリーと一致している必要があります。必要に応じて、証明書の
Subject Alt Names
(SAN) フィールドに追加のホスト名が含まれる場合に、これらのホスト名にも TLS 暗号化を提供するようにmod_ssl
を設定できます。これを設定するには、ServerAliases
パラメーターと対応する名前を追加します。ServerAlias www.example.com server.example.com
秘密鍵、サーバー証明書、および CA 証明書へのパスを設定します。
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
セキュリティー上の理由から、
root
ユーザーのみが秘密鍵ファイルにアクセスできるように設定します。# chown root:root /etc/pki/tls/private/example.com.key # chmod 600 /etc/pki/tls/private/example.com.key
警告秘密鍵に権限のないユーザーがアクセスした場合は、証明書を取り消し、新しい秘密鍵を作成し、新しい証明書を要求します。そうでない場合は、TLS 接続が安全ではなくなります。
firewalld
を使用する場合は、ローカルのファイアウォールでポート443
を開きます。# firewall-cmd --permanent --add-port=443/tcp # firewall-cmd --reload
httpd
サービスを再起動します。# systemctl restart httpd
注記パスワードで秘密鍵ファイルを保護した場合は、
httpd
サービスの起動時に毎回このパスワードを入力する必要があります。
検証
-
ブラウザーを使用して、
https://example.com
に接続します。
1.9.2. Apache HTTP サーバーでサポートされる TLS プロトコルバージョンの設定
デフォルトでは、RHEL の Apache HTTP Server は、最新のブラウザーにも互換性のある安全なデフォルト値を定義するシステム全体の暗号化ポリシーを使用します。たとえば、DEFAULT
ポリシーでは、TLSv1.2
および TLSv1.3
プロトコルバージョンのみが Apache で有効になるように定義します。
Apache HTTP Server がサポートする TLS プロトコルのバージョンを手動で設定できます。たとえば、環境が特定の TLS プロトコルバージョンのみを有効にする必要がある場合には、以下の手順に従います。
-
お使いの環境のクライアントで、セキュリティーの低い
TLS1
(TLSv1.0) プロトコルまたはTLS1.1
プロトコルも使用できるようにする必要がある場合。 -
Apache が
TLSv1.2
プロトコルまたはTLSv1.3
プロトコルのみに対応するように設定する場合。
前提条件
- Apache HTTP Server への TLS 暗号化の追加 で説明されているとおり、TLS 暗号化がサーバーで有効になります。
手順
/etc/httpd/conf/httpd.conf
ファイルを編集し、TLS プロトコルバージョンを設定する<VirtualHost>
ディレクティブに以下の設定を追加します。たとえば、TLSv1.3
プロトコルのみを有効にするには、以下を実行します。SSLProtocol -All TLSv1.3
httpd
サービスを再起動します。# systemctl restart httpd
検証
以下のコマンドを使用して、サーバーが
TLSv1.3
に対応していることを確認します。# openssl s_client -connect example.com:443 -tls1_3
以下のコマンドを使用して、サーバーが
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
- 必要に応じて、他の TLS プロトコルバージョンのコマンドを繰り返し実行します。
関連情報
-
システム上の
update-crypto-policies(8)
man ページ - Using system-wide cryptographic policies.
-
SSLProtocol
パラメーターの詳細は、Apache マニュアルのmod_ssl
のドキュメント Apache HTTP サーバーマニュアルのインストール を参照してください。
1.9.3. Apache HTTP サーバーで対応している暗号の設定
デフォルトでは、Apache HTTP サーバーは、安全なデフォルト値を定義するシステム全体の暗号化ポリシーを使用します。これは、最近のブラウザーとも互換性があります。システム全体の暗号化で使用可能な暗号化のリストは、/etc/crypto-policies/back-ends/openssl.config
ファイルを参照してください。
Apache HTTP Server がサポートする暗号を手動で設定できます。お使いの環境で特定の暗号が必要な場合は、以下の手順に従います。
前提条件
- Apache HTTP Server への TLS 暗号化の追加 で説明されているとおり、TLS 暗号化がサーバーで有効になります。
手順
/etc/httpd/conf/httpd.conf
ファイルを編集し、TLS 暗号を設定する<VirtualHost>
ディレクティブにSSLCipherSuite
パラメーターを追加します。SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"
この例では、
EECDH+AESGCM
、EDH+AESGCM
、AES256+EECDH
、およびAES256+EDH
暗号のみを有効にし、SHA1
およびSHA256
メッセージ認証コード (MAC) を使用するすべての暗号を無効にします。httpd
サービスを再起動します。# systemctl restart httpd
検証
Apache HTTP Server が対応する暗号化のリストを表示するには、以下を行います。
nmap
パッケージをインストールします。# yum install nmap
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 ...
関連情報
-
システム上の
update-crypto-policies(8)
man ページ - Using system-wide cryptographic policies.
- SSLCipherSuite