4.13. TLS 設定の強化
TLS
(Transport Layer Security
)は、ネットワーク通信のセキュリティーを保護するために使用される暗号化プロトコルです。優先する 鍵交換プロトコル、認証方法、および暗号化アルゴリズムを設定してシステムのセキュリティー設定を強化する際には、対応するクライアントの範囲が広ければ広いほど、セキュリティーのレベルが低くなることを認識しておく必要があります。反対に、セキュリティー設定を厳密にすると、クライアントとの互換性が制限され、システムからロックアウトされるユーザーが出てくる可能性もあります。可能な限り厳密な設定を目指し、互換性に必要な場合に限り、設定を緩めるようにしてください。
Red Hat Enterprise Linux 7 に含まれるライブラリーが提供するデフォルト設定は、ほとんどのデプロイメントで十分に安全である点に留意してください。
TLS
実装は、可能な場合は安全なアルゴリズムを使用しますが、レガシークライアントまたはサーバーへの接続を防止しません。セキュリティーが保護されたアルゴリズムまたはプロトコルに対応しないレガシーなクライアントまたはサーバーの接続が期待できないまたは許可されない場合に、厳密なセキュリティー要件の環境で、このセクションで説明されている強化された設定を適用します。
4.13.1. 有効にするアルゴリズムの選択
選択して設定する必要のあるコンポーネントがいくつかあります。以下の各項目は、結果として得られる設定の堅牢性 (および結果的にはクライアントでのサポートレベル)、またはソリューションがシステムに与える計算上の要求に直接影響します。
プロトコルのバージョン
最新バージョンの
TLS
は、最高のセキュリティーメカニズムを提供します。古いバージョンの TLS
(または SSL
)のサポートを含めるという面倒な理由がない限り、システムが最新バージョンの TLS
のみを使用して接続をネゴシエートできるようにします。
SSL
バージョン 2 または 3 を使用したネゴシエーションを許可しないでください。これらのバージョンは両方とも、深刻なセキュリティーの脆弱性があります。TLS
バージョン 1.0 以降を使用したネゴシエーションのみを許可します。TLS
の現行バージョン 1.2 が常に推奨されます。
注記
現在、TLS のすべてのバージョンのセキュリティーは、
TLS
拡張機能、特定の暗号(以下を参照)、およびその他の回避策の使用に依存することに注意してください。すべての TLS
接続ピアは、安全な再ネゴシエーション表示(RFC 5746)を実装する必要があり、圧縮をサポートしてはならず、CBC
モード暗号(Lucky Thirteen 攻撃)に対するタイミング攻撃の緩和策を実装する必要があります。TLS 1.0
クライアントは、レコード分割を追加で実装する必要があります(BEAST 攻撃に対する回避策)。TLS 1.2
は、既知の問題のない AES-GCM
、AES-CCM
、または Camellia-GCM
などの Authenticated Encryption with Associated Data (AEAD)モード暗号をサポートします。ここで述べた緩和策はすべて、Red Hat Enterprise Linux に含まれる暗号ライブラリーに実装されています。
プロトコルのバージョンと推奨される使用方法の概要については、表4.6「プロトコルのバージョン」 を参照してください。
プロトコルのバージョン | 推奨される使用方法 |
---|---|
SSL v2 |
使用しないでください。深刻なセキュリティー上の脆弱性があります。
|
SSL v3 |
使用しないでください。深刻なセキュリティー上の脆弱性があります。
|
TLS 1.0 |
必要に応じて相互運用性の目的で使用します。相互運用性を保証する方法で緩和できない既知の問題があるため、緩和策はデフォルトで有効になっていません。最新の暗号スイートには対応しません。
|
TLS 1.1 |
必要に応じて相互運用性の目的で使用します。既知の問題はありませんが、Red Hat Enterprise Linux のすべての
TLS 実装に含まれるプロトコル修正に依存します。最新の暗号スイートには対応しません。
|
TLS 1.2 |
推奨されるバージョン。最新の
AEAD 暗号スイートに対応します。
|
Red Hat Enterprise Linux の一部のコンポーネントは、
TLS 1. 1 または 1.2 のサポートを提供していても、TLS 1
.0
を使用するように設定されて い
ます。これは、最新バージョンの TLS
をサポートしていない可能性のある外部サービスとの最高レベルの相互運用性を実現しようとする試みによって動機付けされます。相互運用性の要件に応じて、利用可能な最高バージョンの TLS
を有効にします。
重要
SSL v3
の使用は推奨されません。ただし、安全ではなく、一般的な使用には適していないと考えられているにもかかわらず、SSL v3
を有効にしておく必要があります。暗号化をサポートしていないサービスを使用している場合でも、stunnel を使用して通信を安全に暗号化する方法については、「stunnel の使用」 を参照してください。
暗号化スイート
旧式で、安全ではない 暗号化スイート ではなく、最近の、より安全なものを使用してください。暗号化スイートの eNULL および aNULL は、暗号化や認証を提供しないため、常に無効にしてください。重大な欠点がある
RC4
または HMAC-MD5
をベースとする暗号化スイートも可能であれば、無効にする必要があります。いわゆるエクスポート暗号化スイートも同様です。エクスポート暗号化スイートは意図的に弱くなっているため、侵入が容易になっています。
128 ビット未満のセキュリティーしか提供しない暗号化スイートでは直ちにセキュリティーが保護されなくなるというわけではありませんが、使用できる期間が短いため考慮すべきではありません。アルゴリズムが 128 ビット以上のセキュリティーを使用している場合は、少なくとも数年間は解読不可能であることが期待されているため、強く推奨されます。
3DES
暗号は 168 ビットの使用を公開しますが、実際には 112 ビットのセキュリティーを提供します。
サーバーの鍵が危険にさらされた場合でも、暗号化したデータの機密性を保証する (完全な) 前方秘匿性 (PFS) に対応する暗号スイートを常に優先します。このルールにより、高速
RSA
鍵交換は除外されますが、ECDHE
および DHE
を使用できます。この 2 つのうち、ECDHE
が高速であるため、選択が推奨されます。
また、
AES-GCM
などの AEAD
暗号は、パディング oracle 攻撃に対して脆弱ではないため、CBC
-mode 暗号よりも優先する必要があります。また、多くの場合、特にハードウェアに AES
の暗号化アクセラレーターがある場合、AES-GCM
は CBC
モードの AES
よりも高速です。
ECDSA
証明書で ECDHE
鍵交換を使用する場合、トランザクションは純粋な RSA
鍵交換よりもさらに高速になります。レガシークライアントのサポートを提供するために、サーバーに証明書と鍵のペアを 2 つインストールします。1 つは ECDSA
鍵(新しいクライアント用)と RSA
鍵(レガシークライアント用)です。
公開鍵の長さ
RSA
鍵を使用する場合は、少なくとも SHA-256 で署名されている 3072 ビット以上の鍵の長さを常に優先します。これは、実際の 128 ビットのセキュリティーに対して十分な大きさです。
警告
システムのセキュリティー強度は、チェーンの中の最も弱いリンクが示すものと同じになることを覚えておいてください。たとえば、強力な暗号化だけではすぐれたセキュリティーは保証されません。鍵と証明書も同様に重要で、認証機関 (CA) が鍵の署名に使用するハッシュ機能と鍵もまた重要になります。
4.13.2. TLS 実装の使用
Red Hat Enterprise Linux 7 には、
TLS
の複数のフル機能の実装が同梱されています。このセクションでは、OpenSSL および GnuTLS の設定について説明します。個々のアプリケーションで TLS
サポートを設定する方法については、「特定アプリケーションの設定」 を参照してください。
利用可能な
TLS
実装は、TLS
で保護された通信を確立および使用する際に結合されるすべての要素を定義するさまざまな 暗号スイート のサポートを提供します。
さまざまな実装に含まれるツールを使用して、「有効にするアルゴリズムの選択」 で概説されている推奨事項を考慮しながら、ユースケースに可能な限り最適なセキュリティーを提供する暗号スイートをリストアップし、指定することができます。このようにして得られた暗号スイートは、個々のアプリケーションが接続をネゴシエートして保護する方法を設定するために使用することができます。
重要
使用する
TLS
実装またはその実装を利用するアプリケーションの更新またはアップグレードごとに、必ず設定を確認してください。新しいバージョンでは、有効化したくない、かつ現在の設定では無効化できない新しい暗号スイートが導入される可能性があります。
4.13.2.1. OpenSSL での暗号化スイートの使用
OpenSSL は、
SSL
プロトコルおよび TLS
プロトコルをサポートするツールキットおよび暗号化ライブラリーです。Red Hat Enterprise Linux 7 では、設定ファイルは /etc/pki/tls/openssl.cnf
で提供されます。この設定ファイルのフォーマットは、config(1) に記載されています。「OpenSSL の設定」も参照してください。
OpenSSL のインストールでサポートされているすべての暗号スイートの一覧を取得するには、以下のように openssl コマンドを ciphers サブコマンドと共に使用します。
~]$ openssl ciphers -v 'ALL:COMPLEMENTOFALL'
その他のパラメーター( OpenSSL ドキュメントの 暗号文字列 および キーワード と呼ばれます)を ciphers サブコマンドに渡して、出力を絞り込みます。特別なキーワードを使用して、特定の条件を満たすスイートのみを一覧表示できます。たとえば、
HIGH
グループに属すると定義されているスイートのみをリストアップするには、次のコマンドを使用します。
~]$ openssl ciphers -v 'HIGH'
利用可能なキーワードと暗号文字列の一覧は、ciphers(1) の man ページを参照してください。
「有効にするアルゴリズムの選択」 の推奨事項を満たす暗号化スイートを一覧表示するには、以下のようなコマンドを実行します。
~]$ 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
上記のコマンドは、セキュアでないすべての暗号を省略し、
一時的な省略曲線 Diffie-Hellman
鍵交換および ECDSA
暗号を優先し、RSA
鍵交換を省略します(これにより 完全な転送秘密性が確保されます)。
これはかなり厳密な設定であり、より広範囲のクライアントとの互換性を確保するために、実際のシナリオの条件を緩和する必要がある場合があることに注意してください。
4.13.2.2. GnuTLS での暗号化スイートの使用
GnuTLS は、
SSL
および TLS
プロトコルおよび関連テクノロジーを実装する通信ライブラリーです。
注記
Red Hat Enterprise Linux 7 での GnuTLS インストールは、ほとんどのユースケースに十分なセキュリティーを提供する最適なデフォルト設定値を提供します。特別なセキュリティー要件を満たす必要がない限り、提供されたデフォルトを使用することが推奨されます。
-l
(または --list
)オプションを指定して gnutls-cli コマンドを使用して、サポートされているすべての暗号スイートを一覧表示します。
~]$ gnutls-cli -l
-l
オプションによって表示される暗号スイートのリストを絞り込むには、1 つ以上のパラメーター( GnuTLS ドキュメントの 優先度文字列 および キーワード と呼ばれます)を --priority
オプションに渡します。利用可能なすべての優先度文字列の一覧は、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.13.3. 特定アプリケーションの設定
さまざまなアプリケーションが
TLS
に独自の設定メカニズムを提供します。このセクションでは、最も一般的に使用されるサーバーアプリケーションで採用されている TLS
関連の設定ファイルについて説明し、一般的な設定の例を提供します。
いずれの設定を選択しても、サーバーアプリケーションが強制的に サーバー側が指定した順序 で暗号を利用することを確認し、使用される暗号化スイートの選択がサーバーでの設定順に行われるように設定してください。
4.13.3.1. Apache HTTP Server の設定
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 パッケージをインストールして、
TLS
設定を含む Apache HTTP Server の完全なドキュメントを取得します。/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.13.3.2. Dovecot メールサーバーの設定
TLS
を使用するように Dovecot メールサーバーのインストールを設定するには、/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.13.4. 追加情報
TLS 設定および関連トピックの詳細は、以下に挙げるリソースを参照してください。
インストールされているドキュメント
- config(1) :
/etc/ssl/openssl.conf
設定ファイルの形式を説明します。 - ciphers(1) : 利用可能な OpenSSL キーワードおよび暗号文字列の一覧が含まれます。
/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.
: Dovecot メールサーバーが使用する /etc/dovecot/conf.d/10-ssl.conf 設定ファイルで利用可能な基本的な設定ディレクティブの一部を説明します。10/wiki/SSL.DovecotConfiguration.txt
オンラインドキュメント
- Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイド: Red Hat Enterprise Linux 7 『の SELinux ユーザーおよび管理者のガイド』 では、SELinux の原則と、SELinux を Apache HTTP Server などのさまざまなサービスで設定および使用する方法を説明します。
関連項目
- 「OpenSSL の使用」 では、OpenSSL を使用して鍵を作成および管理し、証明書を生成し、ファイルを暗号化および復号化する方法について説明しています。