標準名のドキュメントでわかるように、すべてのエントリ (SSLv3、TLSv1.0、TLSv1.1、...) は、他のバージョンをサポートする可能性があると述べています。
実際には、Oracle JDK (および OpenJDK) では、それらはすべて実行されます。ソース コードを見ると、TLS10Context
クラスは TLS、SSL、SSLv3 および TLS10 にTLS11Context
使用されるものであり、TLSv1.1 および TLSv1.2 に使用されTLS12Context
ます。すべてが SSL/TLS のすべてのバージョンをサポートします。デフォルトで有効になっているものはさまざまです。
これは、別のプロバイダーまたは JRE ベンダーによって異なる場合があります。もちろん、少なくとも使用したいプロトコル バージョンをサポートするものを選択する必要があります。
使用されるプロトコルは、後で使用するSSLSocket.setEnabledProtocols(...)
か、またはSSLEngine
同等のものを使用して決定されることに注意してください。
原則として、できるだけ高いバージョン番号 (SSLv3 < TLSv1.0 < TLSv1.1 ...) を使用します。これは、通信相手が何をサポートしているかによって異なります。
デフォルトで有効になるプロトコルは、Oracle JRE の正確なバージョンによって異なります。
OpenJDK 7u40-b43のソース コードをsun.security.ssl.SunJSSE
見ると、プロトコルに関しては(および も同様)TLS
は単なるエイリアスです。(それ自体の内部クラスである)のさまざまな実装を見る:TLSv1
SSL
SSLv3
SSLContext
SSLContextImpl
SSLContextImpl
- すべてがすべてのプロトコルをサポートします。
- デフォルトでは、すべてのプロトコルがサーバー側で有効になっています。
- デフォルトで有効になっているクライアント側のプロトコルはさまざまです。
TLS10Context
(プロトコルSSL
、SSLv3
、TLS
、 に使用TLSv1
) は、クライアント側でデフォルトで SSLv3 から TLSv1.0 を有効にします。
TLS11Context
( protocol に使用TLSv1.1
) もデフォルトで TLSv1.1 を有効にします。
TLS12Context
( protocol に使用TLSv1.2
) もデフォルトで TLSv1.2 を有効にします。
- FIPS が有効になっている場合、SSL はサポートされません (デフォルトでは有効になっていません)。
これは、Java 8 で、新しいjdk.tls.client.protocols
システム プロパティと連動して変更されます。
繰り返しになりますが、OpenJDK 8u40-b25のソース コードをsun.security.ssl.SunJSSE
見ると、SSLContext
プロトコルTLSv1
、TLSv1.1
、およびも 、 、およびTLSv1.2
を利用しており、これらは Java 7 と同じロジックに従います。TLS10Context
TLS11Context
TLS12Context
ただし、プロトコルTLS
はそれらのいずれにもエイリアスされなくなりました。むしろ、システム プロパティTLSContext
の値に依存する which を使用します。JSSEリファレンスガイドjdk.tls.client.protocols
から:
クライアントで特定の SunJSSE プロトコルを有効にするには、それらを引用符で囲んでカンマ区切りのリストで指定します。その後、サポートされている他のすべてのプロトコルがクライアントで無効になります。たとえば、このプロパティの値が「TLSv1,TLSv1.1」の場合、TLSv1 および TLSv1.1 のクライアントのデフォルト プロトコル設定はクライアントで有効になり、SSLv3、TLSv1.2、および SSLv2Hello は無効になります。クライアント。
このプロパティが空の場合、クライアント側とサーバー側の両方ですべてのプロトコルがデフォルトで有効になります。
もちろん、Oracle JRE 8 の最近のバージョンでは、SSL もデフォルトで完全に無効になっています(そのため、これらのリストから削除されています)。
どちらの場合も (JRE 7 および 8)、SSLContext
デフォルトで取得するは、プロトコルを使用して取得し、デフォルトのトラストストア パラメータなどで初期化したSSLContext.getDefault()
ものとほぼ同じであることに注意してください。SSLContext
TLS