3.1. プロトコルバージョン (Protocol Versions)
3.1.1. SSL/TLS プロトコルバージョン
古い安全性の低いバージョンのSSL/TLSの使用を停止し、現代的でより安全なバージョンの使用を開始することが重要です。したがって、TLS/SSLプロトコルバージョンに関する推奨事項は以下の通りです:
-
実装はSSLバージョン2のネゴシエーションを行ってはなりません (MUST NOT)。
理由: 今日、SSLv2は安全でないと考えられています [RFC6176]。
-
実装はSSLバージョン3のネゴシエーションを行ってはなりません (MUST NOT)。
理由: SSLv3 [RFC6101] はSSLv2の改良版であり、重要なセキュリティホールを修正しましたが、強力な暗号スイートをサポートしていませんでした。SSLv3はTLS拡張をサポートしておらず、その中にはセキュリティクリティカルなもの (例: renegotiation_info [RFC5746]) も含まれます。さらに、POODLE攻撃 [POODLE] の出現により、SSLv3は現在、根本的に安全でないと広く認識されています。詳細については [DEP-SSLv3] を参照してください。
-
実装はTLSバージョン1.0 [RFC2246] のネゴシエーションを行うべきではありません (SHOULD NOT)。唯一の例外は、ネゴシエーションでより高いバージョンが利用できない場合です。
理由: TLS 1.0 (1999年公開) は、多くの現代的で強力な暗号スイートをサポートしていません。さらに、TLS 1.0はCBCベースの暗号スイート用のレコードごとの初期化ベクトル (IV) を欠いており、一般的なパディングエラーに対して警告しません。
-
実装はTLSバージョン1.1 [RFC4346] のネゴシエーションを行うべきではありません (SHOULD NOT)。唯一の例外は、ネゴシエーションでより高いバージョンが利用できない場合です。
理由: TLS 1.1 (2006年公開) はTLS 1.0よりセキュリティが向上していますが、それでも特定のより強力な暗号スイートをサポートしていません。
-
実装はTLS 1.2 [RFC5246] をサポートしなければならず (MUST)、TLSの以前のバージョンよりもTLSバージョン1.2のネゴシエーションを優先しなければなりません (MUST)。
理由: いくつかのより強力な暗号スイートは、TLS 1.2 (2008年公開) でのみ利用可能です。実際、本文書で推奨される暗号スイート (セクション4.2以下) は、TLS 1.2でのみ利用可能です。
このBCPはTLS 1.2および以前のバージョンに適用されます。このBCPの推奨事項が将来のTLSバージョンに適用されると読者が仮定することは安全ではありません。
3.1.2. DTLS プロトコルバージョン
DTLS (UDPデータグラム用のTLSの適応版) は、TLS 1.1が公開されたときに導入されました。DTLSに関する推奨事項は以下の通りです:
-
実装はDTLSバージョン1.0 [RFC4347] のネゴシエーションを行うべきではありません (SHOULD NOT)。
DTLSのバージョン1.0は、TLSのバージョン1.1に相当します (上記参照)。
-
実装はDTLSバージョン1.2 [RFC6347] をサポートしなければならず (MUST)、そのネゴシエーションを優先しなければなりません (MUST)。
DTLSのバージョン1.2は、TLSのバージョン1.2に相当します (上記参照)。(DTLSのバージョン1.1は存在しません。)
3.1.3. 下位バージョンへのフォールバック (Fallback to Lower Versions)
サーバーがプロトコルの上位バージョンを拒否した後、プロトコルの下位バージョンに「フォールバック」するクライアントは、SSLv3以前にフォールバックしてはなりません (MUST NOT)。
理由: 一部のクライアント実装は、サーバーが上位バージョンのプロトコルを拒否した場合、TLSの下位バージョンやさらにSSLv3に戻します。このフォールバックは、中間者 (MITM) 攻撃者によって強制される可能性があります。TLS 1.0とSSLv3は、本文書で推奨されるバージョンであるTLS 1.2よりも大幅に安全性が低くなっています。TLS 1.0のみのサーバーは依然として非常に一般的ですが、IPスキャンによると、SSLv3のみのサーバーは現在のWebサーバー集団の約3%に過ぎません。(本書執筆時点では、ダウングレード攻撃を防ぐための明示的な方法が [RFC7507] で最近定義されました。)