Show Table of Contents
4.11. TLS 設定の強化
TLS (トランスポート層セキュリティー) は、ネットワーク通信をセキュアにするために使用する暗号化プロトコルです。優先する鍵交換プロトコル、認証方法、および暗号化アルゴリズムを設定することでシステムのセキュリティー設定を強化する際には、サポートするクライアントの範囲が広ければ広いほど、セキュリティーのレベルが低くなることを認識しておく必要があります。反対に、セキュリティー設定を厳密にすると、クライアントとの互換性が制限され、システムからロックアウトされるユーザーが出てくる可能性もあります。可能な限り厳密な設定を目指し、互換性のために必要な場合にのみ、これを緩めるようにしてください。
Red Hat Enterprise Linux 7 に含まれるライブラリーが提供するデフォルト設定は、ほとんどの導入において十分に安全なものです。
TLS 実装は、可能な場合はセキュアなアルゴリズムを使用する一方で、レガシークライアントまたはサーバーとの接続を妨げません。セキュアなアルゴリズムやプロトコルをサポートしていないレガシーのクライアントやサーバーの接続が期待できない場合やそれらの接続が許可されない場合に、厳密なセキュリティー要件の環境で本セクションで説明されている強化設定を適用してください。
4.11.1. 有効にするアルゴリズムの選択
選択して設定する必要があるコンポーネントがいくつかあります。以下で説明するものはすべて、その設定結果 (つまり、クライアントにおけるサポートレベル) やシステム上でソリューションが持つコンピューターのデマンドに直接影響します。
プロトコルのバージョン
最新バージョンの
TLS は、すぐれたセキュリティーメカニズムを提供します。古いバージョンの TLS (さらに SSL) のサポートを含める切実な理由がなければ、最新バージョンの TLS のみを使ってシステムが接続するようにしてください。
SSL のバージョン 2 または 3 を使った処理を許可しないでください。これらのバージョンには、セキュリティーに関する重大な脆弱性があります。TLS のバージョン 1.0 以上を使った処理のみを許可してください。現行の TLS バージョン 1.2 を常に優先するようにしてください。
注記
TLS の全バージョンのセキュリティーは現在、TLS 拡張機能、特定の暗号 (下記参照)、および他の回避策に依存していることに注意してください。TLS の接続ピアはすべてセキュアな再交渉記号 (RFC 5746) を実装する必要があり、圧縮をサポートしていない必要があります。また、CBC モードの暗号 (Lucky Thirteen 攻撃) に対するタイミング攻撃を緩和する方法を実装する必要があります。TLS v1.0 クライアントはさらに、レコード分割 (BEAST 攻撃に対する回避策) を実装する必要があります。TLS v1.2 は、AES-GCM、AES-CCM、または Camellia-GCM といった既知の問題のない 認証付き暗号 (Authenticated Encryption with Associated Data : AEAD) モードの暗号をサポートしています。ここに記載された緩和策はすべて、Red Hat Enterprise Linux に含まれる暗号ライブラリーに実装されています。
プロトコルのバージョンおよび推奨される使用方法についての概要は、表4.6「プロトコルのバージョン」 を参照してください。
表4.6 プロトコルのバージョン
| プロトコルのバージョン | 推奨される使用方法 |
|---|---|
SSL v2 |
使用しないでください。重大なセキュリティー上の脆弱性があります。
|
SSL v3 |
使用しないでください。重大なセキュリティー上の脆弱性があります。
|
TLS v1.0 |
必要な場合は、相互運用性目的で使用します。相互運用性を保証する方法では緩和できない既知の問題があります。このため、緩和策はデフォルトでは有効になっていません。最新の暗号化スイートには対応していません。
|
TLS v1.1 |
必要な場合は、相互運用性目的で使用します。既知の問題はありませんが、Red Hat Enterprise Linux の
TLS 実装すべてに含まれるプロトコル修正に依存します。最新の暗号化スイートには対応していません。
|
TLS v1.2 |
推奨されるバージョンです。最新の
AEAD 暗号化スイートに対応しています。
|
Red Hat Enterprise Linux のコンポーネントのなかには、
TLS v1.1 や v1.2 に対応しているのに TLS v1.0 を使用する設定になっているものもあります。これは、最新バージョンの TLS に対応していない可能性のある外部サービスとの最高レベルの相互運用性を達成する目的でこのようになっています。相互運用性の要件に対応して、利用可能な最高レベルの TLS バージョンを有効にしてください。
重要
SSL v3 の使用は推奨されません。これは安全ではなく一般の使用には適していませんが、SSL v3 をどうしても有効にする必要がある場合は、「stunnel の使用」 を参照してください。暗号化に対応していない、または旧式で安全でない暗号化モードの使用しかできないサービスを使用する場合でも、stunnel を使用して安全に通信を暗号化する方法が説明されています。
暗号化スイート
旧式の安全でない 暗号化スイート ではなく、最近のより安全なものを使ってください。eNULL および aNULL 暗号化スイートは暗号化や認証をまったく提供しないので、常に無効にしてください。
RC4 や HMAC-MD5 をベースとした暗号化スイートには重大な欠陥があるので、可能な場合はこれらも無効にしてください。いわゆる エクスポート暗号化スイートも同様にしてください。これらは意図的に弱くなっているので、侵入が容易になっています。
128 ビット未満のセキュリティーしか提供しない暗号化スイートは直ちに不安というわけではありませんが、これらは短期間の使用に考慮すべきではありません。128 ビット以上のセキュリティーを使用するアルゴリズムは少なくとも数年間は解読不可能であることが期待されているので、強く推奨されます。
3DES 暗号は 168 ビットの使用といわれていますが、実際に提供されているのは 112 ビットのセキュリティーであることに注意してください。
(perfect) forward secrecy (PFS) をサポートしている暗号化スイートを常に優先させてください。PFS は、サーバー鍵が漏れたとしても、暗号化されたデータの秘密性は確保されます。これにより、すばやい
RSA 鍵の交換がなくなる一方、ECDHE および DHE の使用が可能になります。これら 2 つのうちでは、ECDHE の方がより速いため、優先される選択肢となります。
AES-GCM などの AEAD 暗号はパディングオラクル攻撃 (padding oracle attacks) に対して脆弱ではないため、CBC モードの暗号よりも優先してください。さらに多くの場合、AES-GCM は特にハードウェアに AES 用の暗号化アクセラレーターがある場合、CBC モードの AES よりも高速です。
また、
ECDSA 証明書を使って ECDHE 鍵交換を使用する際は、純粋な RSA 鍵交換よりも速くなります。レガシークライアント用のサポートを提供するには、サーバー上に証明書と鍵のペアを 2 つインストールします。ひとつは ECDSA 鍵 (新規クライアント用) で、もうひとつは RSA 鍵 (レガシークライアント用) です。
公開鍵の長さ
RSA 鍵を使用する際は常に、少なくとも SHA-256 で署名された 最低 3072 ビットの鍵の長さを優先させます。これは、真の 128 ビットのセキュリティーでは十分な大きさです。
警告
システムのセキュリティー強度は、チェーンの中の最も弱いリンクが示すものと同じであるということを念頭に置いてください。たとえば、強力な暗号化だけではすぐれたセキュリティーは保証されません。鍵と証明書も同様に重要で、認証機関 (CA) が鍵の署名に使用するハッシュ機能と鍵もまた重要になります。
4.11.2. TLS 実装の使用
Red Hat Enterprise Linux 7 には、完全機能の
TLS 実装が同梱されています。本セクションでは、OpenSSL および GnuTLS の設定を説明します。個別アプリケーションでの TLS サポートの設定方法については、「特定アプリケーションの設定」 を参照してください。
利用可能な
TLS 実装は、各種の 暗号化スイートをサポートします。これらのスイートは、TLS でセキュア化された通信の確立および使用時に一緒に送られる全要素を定義します。
「有効にするアルゴリズムの選択」 で示された推奨事項を検討するとともに、各種の実装で含まれているツールを使って、ご自分のユースケースにとって最善のセキュリティーを提供する暗号化スイートを一覧表示、指定してください。そこでできた暗号化スイートを使って、各アプリケーションが接続を処理してセキュア化することができます。
重要
使用する
TLS 実装またはその実装を利用するアプリケーションが更新またはアップグレードされた後は、必ず設定をチェックしてください。新しいバージョンは、ユーザーが有効化を希望せずかつ使用中の設定では無効にされない、新たな暗号化スイートを導入する場合があります。
4.11.2.1. OpenSSL での暗号化スイートの使用
OpenSSL is a toolkit and a cryptography library that support the
SSL and TLS protocols. On Red Hat Enterprise Linux 7, a configuration file is provided at /etc/pki/tls/openssl.cnf. The format of this configuration file is described in config(1). See also 「OpenSSL の設定」.
インストール済みの OpenSSL でサポートされている暗号化スイートすべてを一覧表示するには、以下のように
openssl コマンドで ciphers サブコマンドを実行します。
~]$ openssl ciphers -v 'ALL:COMPLEMENTOFALL'
(OpenSSL ドキュメンテーションでは cipher strings および keywords と呼ばれる) 他のパラメーターを
ciphers コマンドに渡して出力を絞ります。特別なキーワードを使うと、特定の条件を満たすスイートのみを一覧表示することができます。たとえば、HIGH グループに属するスイートのみを一覧表示するには、以下のコマンドを実行します。
~]$ openssl ciphers -v 'HIGH'
See the ciphers(1) manual page for a list of available keywords and cipher strings.
「有効にするアルゴリズムの選択」 の推奨事項を満たす暗号化スイートを一覧表示するには、以下のようなコマンドを実行します。
~]$ openssl ciphers -v 'kEECDH+aECDSA+AES:kEECDH+AES+aRSA:kEDH+aRSA+AES' | column -t
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-AES128-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(128) Mac=SHA1
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-RSA-AES128-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(128) Mac=SHA1
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(128) Mac=SHA256
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
上記のコマンドはセキュアでない暗号をすべて省略し、
ephemeral elliptic curve Diffie-Hellman 鍵交換と ECDSA 暗号を優先します。また、RSA 鍵交換も省略します (perfect forward secrecy が保証されます)。
これはやや厳密な設定であることに注意してください。現実には条件を多少緩和して、より広い範囲のクライアントとの互換性を可能にする必要があるかもしれません。
4.11.2.2. GnuTLS での暗号化スイートの使用
GnuTLS は、
SSL および TLS の各プロトコルとそれに関連する技術を実装する通信ライブラリーです。
注記
Red Hat Enterprise Linux 7 上の GnuTLS は、ほとんどのユースケースに十分なセキュリティーをもたらす、最適なデフォルト設定値を提供します。特別なセキュリティー要件がない限り、提供されたデフォルト値の使用が推奨されます。
gnutls-cli コマンドを -l (または --list) オプションと実行すると、サポート対象の暗号化スイートすべてが一覧表示されます。
~]$ gnutls-cli -l-l オプションで表示された暗号化スイート一覧を絞り込むには、ひとつ以上のパラメーター (GnuTLS ドキュメンテーションでは priority strings および keywords と呼ばれる) を --priority オプションに渡します。利用可能な priority strings の全一覧は、http://www.gnutls.org/manual/gnutls.html#Priority-Strings にある GnuTLS ドキュメンテーションを参照してください。たとえば、少なくとも 128 ビットのセキュリティーを提供する暗号化スイート一覧を表示するには、以下のコマンドを実行します。
~]$ gnutls-cli --priority SECURE128 -l
「有効にするアルゴリズムの選択」 の推奨事項を満たす暗号化スイートを一覧表示するには、以下のようなコマンドを実行します。
~]$ gnutls-cli --priority SECURE256:+SECURE128:-VERS-TLS-ALL:+VERS-TLS1.2:-RSA:-DHE-DSS:-CAMELLIA-128-CBC:-CAMELLIA-256-CBC -l
Cipher suites for SECURE256:+SECURE128:-VERS-TLS-ALL:+VERS-TLS1.2:-RSA:-DHE-DSS:-CAMELLIA-128-CBC:-CAMELLIA-256-CBC
TLS_ECDHE_ECDSA_AES_256_GCM_SHA384 0xc0, 0x2c TLS1.2
TLS_ECDHE_ECDSA_AES_256_CBC_SHA384 0xc0, 0x24 TLS1.2
TLS_ECDHE_ECDSA_AES_256_CBC_SHA1 0xc0, 0x0a SSL3.0
TLS_ECDHE_ECDSA_AES_128_GCM_SHA256 0xc0, 0x2b TLS1.2
TLS_ECDHE_ECDSA_AES_128_CBC_SHA256 0xc0, 0x23 TLS1.2
TLS_ECDHE_ECDSA_AES_128_CBC_SHA1 0xc0, 0x09 SSL3.0
TLS_ECDHE_RSA_AES_256_GCM_SHA384 0xc0, 0x30 TLS1.2
TLS_ECDHE_RSA_AES_256_CBC_SHA1 0xc0, 0x14 SSL3.0
TLS_ECDHE_RSA_AES_128_GCM_SHA256 0xc0, 0x2f TLS1.2
TLS_ECDHE_RSA_AES_128_CBC_SHA256 0xc0, 0x27 TLS1.2
TLS_ECDHE_RSA_AES_128_CBC_SHA1 0xc0, 0x13 SSL3.0
TLS_DHE_RSA_AES_256_CBC_SHA256 0x00, 0x6b TLS1.2
TLS_DHE_RSA_AES_256_CBC_SHA1 0x00, 0x39 SSL3.0
TLS_DHE_RSA_AES_128_GCM_SHA256 0x00, 0x9e TLS1.2
TLS_DHE_RSA_AES_128_CBC_SHA256 0x00, 0x67 TLS1.2
TLS_DHE_RSA_AES_128_CBC_SHA1 0x00, 0x33 SSL3.0
Certificate types: CTYPE-X.509
Protocols: VERS-TLS1.2
Compression: COMP-NULL
Elliptic curves: CURVE-SECP384R1, CURVE-SECP521R1, CURVE-SECP256R1
PK-signatures: SIGN-RSA-SHA384, SIGN-ECDSA-SHA384, SIGN-RSA-SHA512, SIGN-ECDSA-SHA512, SIGN-RSA-SHA256, SIGN-DSA-SHA256, SIGN-ECDSA-SHA256
上記のコマンドは、出力を 128 ビット以上のセキュリティーがある暗号に絞り込み、より強力なものを優先しています。また、
RSA 鍵交換と DSS 認証を禁止しています。
これはやや厳密な設定であることに注意してください。現実には条件を多少緩和して、より広い範囲のクライアントとの互換性を可能にする必要があるかもしれません。
4.11.3. 特定アプリケーションの設定
アプリケーションはそれぞれ、
TLS 用に個別の設定メカニズムを提供します。本セクションでは、最も一般的に使用されているサーバーアプリケーションが使用する TLS 関連の設定ファイルについて説明し、よくある説明例を示します。
いずれの設定を選択しても、サーバーアプリケーションが サーバー側の暗号命令 を強制し、使用される暗号化スイートが必ずユーザー設定の命令で決定されるようにしてください。
4.11.3.1. Apache HTTP サーバーの設定
Apache HTTP Server は、
TLS に OpenSSL と NSS の両方のライブラリーを使用できます。選択した TLS ライブラリーによって、mod_ssl か mod_nss のモジュールをインストールする必要があります (その名前の付いたパッケージが提供)。たとえば、OpenSSL mod_ssl モジュールを提供するパッケージをインストールするには、root で以下のコマンドを実行します。
~]# yum install mod_ssl
mod_ssl パッケージは
/etc/httpd/conf.d/ssl.conf 設定ファイルをインストールし、これを使うと Apache HTTP Server の TLS 関連の設定を修正できます。同様に、mod_nss パッケージは /etc/httpd/conf.d/nss.conf 設定ファイルをインストールします。
httpd-manual パッケージをインストールして Apache HTTP Server の完全なドキュメンテーションを取得します。これには、
TLS 設定が含まれます。/etc/httpd/conf.d/ssl.conf 設定ファイルで利用可能なディレクティブの詳細は、/usr/share/httpd/manual/mod/mod_ssl.html で説明されています。各種設定の例は、/usr/share/httpd/manual/ssl/ssl_howto.html で確認できます。
/etc/httpd/conf.d/ssl.conf 設定ファイルの設定を修正する場合は、少なくとも下記の 3 つのディレクティブを確認してください。
SSLProtocol- 許可する
TLS(またはSSL) のバージョンを指定するディレクティブです。 SSLCipherSuite- 優先する暗号化スイートを指定する、もしくは許可しないスイートを無効にするディレクティブです。
SSLHonorCipherOrder- コメントを解除して、このディレクティブを
onに設定すると、接続先のクライアントが指定された暗号化の命令に従います。
例を示します。
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:!aNULL:!MD5 SSLHonorCipherOrder on
上記の設定は最小限のものであり、「有効にするアルゴリズムの選択」 にある推奨事項にしたがうことでさらに強化できることに注意してください。
mod_nss モジュールを設定、使用するには、
/etc/httpd/conf.d/nss.conf 設定ファイルを修正します。mod_nss モジュールは mod_ssl から派生しているため、後者と多くの機能を共有しています。設定ファイルの構成だけでなく、利用可能なディレクティブも同様です。mod_nss ディレクティブには、SSL ではなく NSS の接頭辞が付くことに注意してください。mod_nss に適用できない mod_ssl 設定ディレクティブの一覧を含む mod_nss についての概要は、https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html を参照してください。
4.11.3.2. Dovecot メールサーバーの設定
Dovecot メールサーバーが
TLS を使用するように設定するには、/etc/dovecot/conf.d/10-ssl.conf 設定ファイルを修正します。このファイルで利用可能な基本的な設定ディレクティブの一部は、/usr/share/doc/dovecot-2.2.10/wiki/SSL.DovecotConfiguration.txt (このヘルプファイルは標準 Dovecot インストールに含まれています) で説明しています。
/etc/dovecot/conf.d/10-ssl.conf 設定ファイルの設定を修正する場合は、少なくとも下記の 3 つのディレクティブを確認してください。
ssl_protocols- 許可する
TLS(またはSSL) のバージョンを指定するディレクティブです。 ssl_cipher_list- 優先する暗号化スイートを指定する、もしくは許可しないスイートを無効にするディレクティブです。
ssl_prefer_server_ciphers- コメントを解除して、このディレクティブを
yesに設定すると、接続先のクライアントが指定された暗号化の命令に従います。
例を示します。
ssl_protocols = !SSLv2 !SSLv3 ssl_cipher_list = HIGH:!aNULL:!MD5 ssl_prefer_server_ciphers = yes
上記の設定は最小限のものであり、「有効にするアルゴリズムの選択」 にある推奨事項にしたがうことでさらに強化できることに注意してください。
4.11.4. その他の情報
TLS の設定および関連トピックについての詳細情報は、以下に挙げるリソースを参照してください。
インストールされているドキュメント
- config(1) — Describes the format of the
/etc/ssl/openssl.confconfiguration file. - ciphers(1) — Includes a list of available OpenSSL keywords and cipher strings.
/usr/share/httpd/manual/mod/mod_ssl.html— Apache HTTP Server 用に mod_ssl が使用する/etc/httpd/conf.d/ssl.conf設定ファイルで利用可能なディレクティブを詳細に説明しています。/usr/share/httpd/manual/ssl/ssl_howto.html— Apache HTTP Server 用に mod_ssl が使用する/etc/httpd/conf.d/ssl.conf設定ファイルでの現実的な設定例が含まれています。/usr/share/doc/dovecot-2.2.10/wiki/SSL.DovecotConfiguration.txt— Dovecot メールサーバーが使用する/etc/dovecot/conf.d/10-ssl.conf設定ファイルで使用可能な基本的設定ディレクティブについて説明しています。
オンラインのドキュメント
- Red Hat Enterprise Linux 7 SELinux User's and Administrator's Guide — Red Hat Enterprise Linux 7 の 『SELinux User's and Administrator's Guide』 では、SELinux の原則と、SELinux を設定して Apache HTTP Server などのさまざまなサービスで使用する方法が詳細に説明されています。
関連項目
- 「OpenSSL の使用」 では、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.