public abstract class SSLServerSocket extends ServerSocket
ServerSocket
を拡張し、Secure Sockets Layer (SSL)やTransport Layer Security (TLS)などのプロトコルを使用するセキュア・サーバー・ソケットを提供します。
このクラスのインスタンスを作成するときは、通常、SSLServerSocketFactory
を使用します。SSLServerSocket
の主要な機能は、接続をaccept
してSSLSocket
を作成することです。
SSLServerSocket
の一部の状態データは、作成されるSSLSocket
に継承されます。たとえば、有効になっている暗号化方式群とプロトコル、クライアント認証が必要かどうか、このソケットがハンドシェークを開始するときのモード(クライアント・モードまたはサーバー・モード)、などの情報が継承されます。作成されたSSLSocket
に継承された状態は、対応するメソッドを呼び出してオーバーライドできます。
ServerSocket
, SSLSocket
修飾子 | コンストラクタと説明 |
---|---|
protected |
SSLServerSocket()
サブクラスでだけ使用されます。
|
protected |
SSLServerSocket(int port)
サブクラスでだけ使用されます。
|
protected |
SSLServerSocket(int port, int backlog)
サブクラスでだけ使用されます。
|
protected |
SSLServerSocket(int port, int backlog, InetAddress address)
サブクラスでだけ使用されます。
|
修飾子と型 | メソッドと説明 |
---|---|
abstract String[] |
getEnabledCipherSuites()
新しく受け入れた接続で現在使用可能になっている暗号化方式群のリストを返します。
|
abstract String[] |
getEnabledProtocols()
新しく受け入れた接続で現在使用可能になっているプロトコル名を返します。
|
abstract boolean |
getEnableSessionCreation()
このサーバー・ソケットから作成されたソケットで、新しいSSLセッションを確立する場合はtrueを返します。
|
abstract boolean |
getNeedClientAuth()
新しく
accept されたサーバー・モードのSSLSocket 上でクライアント認証が必要な場合はtrueを返します。 |
SSLParameters |
getSSLParameters()
新しく受け入れられた接続で有効なSSLParametersを返します。
|
abstract String[] |
getSupportedCipherSuites()
SSL接続で使用可能にできる暗号化方式群の名前を返します。
|
abstract String[] |
getSupportedProtocols()
使用可能にできるプロトコルの名前を返します。
|
abstract boolean |
getUseClientMode()
受け入れた接続がSSLクライアント・モードになる場合はtrueを返します。
|
abstract boolean |
getWantClientAuth()
新しく受け入れられたサーバー・モードの接続上でクライアント認証が要求される場合はtrueを返します。
|
abstract void |
setEnabledCipherSuites(String[] suites)
受け入れられた接続で使用可能な暗号化方式群を設定します。
|
abstract void |
setEnabledProtocols(String[] protocols)
受け入れた接続で使用可能なプロトコルを制御します。
|
abstract void |
setEnableSessionCreation(boolean flag)
このサーバー・ソケットから作成されたソケットで、新しいSSLセッションを確立すかどうかを制御します。
|
abstract void |
setNeedClientAuth(boolean need)
accept されたサーバー・モードのSSLSockets が、クライアント認証が必要なように初期構成されるかどうかを制御します。 |
void |
setSSLParameters(SSLParameters params)
新しく受け入れられた接続にSSLParametersを適用します。
|
abstract void |
setUseClientMode(boolean mode)
受け入れた接続がデフォルトでSSLサーバー・モードになるか、SSLクライアント・モードになるかを制御します。
|
abstract void |
setWantClientAuth(boolean want)
accept されたサーバー・モードのSSLSockets が、クライアント認証を要求するように初期構成されるかどうかを制御します。 |
accept, bind, bind, close, getChannel, getInetAddress, getLocalPort, getLocalSocketAddress, getReceiveBufferSize, getReuseAddress, getSoTimeout, implAccept, isBound, isClosed, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSocketFactory, setSoTimeout, toString
protected SSLServerSocket() throws IOException
デフォルトの認証コンテキストを使用して、バインドされていないTCPサーバー・ソケットを作成します。
IOException
- ソケットの作成時に入出力エラーが発生した場合protected SSLServerSocket(int port) throws IOException
デフォルトの認証コンテキストを使用して、ポート上にTCPサーバー・ソケットを作成します。キューに格納される接続バックログの最大数は、デフォルトで50に設定されています。キュー内の接続要求が最大数を超えると、新しい接続要求は拒否されます。
ポート番号に0
を指定すると、いずれかの空いているポート上でソケットが作成されます。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、そのcheckListen
メソッドがport
引数をその引数として指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
port
- 待機するポートIOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。SecurityManager.checkListen(int)
protected SSLServerSocket(int port, int backlog) throws IOException
デフォルトの認証コンテキストと、指定された接続バックログを使用して、ポート上にTCPサーバー・ソケットを作成します。
ポート番号に0
を指定すると、いずれかの空いているポート上でソケットが作成されます。
backlog
引数は、ソケットの保留されている接続の要求された最大数です。正確なセマンティックスは実装に固有です。たとえば、実装が最大長を規定していたり、パラメータをまったく無視したりする場合があります。指定される値は0
より大きくなければいけません。0
以下の場合は、実装固有のデフォルトが使用されます。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、そのcheckListen
メソッドがport
引数をその引数として指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
port
- 待機するポートbacklog
- 着信接続のキューの要求された最大長。IOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。SecurityManager.checkListen(int)
protected SSLServerSocket(int port, int backlog, InetAddress address) throws IOException
デフォルトの認証コンテキスト、指定された接続バックログ、および指定されたネットワーク・インタフェースを使用して、ポート上にTCPサーバー・ソケットを作成します。このコンストラクタは、ファイアウォールやルーターとして使用されるマルチホーム・ホスト上で使用され、ネットワーク・サービスを提供するインタフェースを制御します。
セキュリティ・マネージャが存在する場合、この操作が許可されるように、そのcheckListen
メソッドがport
引数をその引数として指定して呼び出されます。この結果、SecurityExceptionがスローされることがあります。
ポート番号に0
を指定すると、いずれかの空いているポート上でソケットが作成されます。
backlog
引数は、ソケットの保留されている接続の要求された最大数です。正確なセマンティックスは実装に固有です。たとえば、実装が最大長を規定していたり、パラメータをまったく無視したりする場合があります。指定される値は0
より大きくなければいけません。0
以下の場合は、実装固有のデフォルトが使用されます。
addressがnullの場合、これはデフォルトで、任意の(すべての)ローカル・アドレス上の接続を受け入れます。
port
- 待機するポートbacklog
- 着信接続のキューの要求された最大長。address
- 接続を受け入れるネットワーク・インタフェースのアドレスIOException
- ソケットの作成時に入出力エラーが発生した場合SecurityException
- セキュリティ・マネージャが存在し、そのcheckListen
メソッドでこの操作が許可されていない場合。IllegalArgumentException
- portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。SecurityManager.checkListen(int)
public abstract String[] getEnabledCipherSuites()
このリストが明示的に変更されていない場合は、システム・デフォルトにより、使用可能なすべての暗号化方式群で、最小限のサービス品質が保証されます。
実際に使用する暗号化方式群は、要件に応じて適切に選択してください。たとえば、サーバー・ソケットがなんらかの認証を要求するように設定されているときに、暗号化方式群で使用できる非公開鍵がサーバー・ソケットに割り当てられていない場合、または暗号化方式群が匿名であるためクライアント認証を使用できない場合、それらの暗号化方式群は実際には使用できません。
getSupportedCipherSuites()
, setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String[] suites)
暗号化方式群は、getSupportedCipherSuites()により、サポート対象としてリストされていなければいけません。このメソッドの呼出しが成功したあと、suites
パラメータに示されている暗号化方式群のみが使用可能になります。
このServerSocketの認証コンテキストで使用できない認証情報を要求する暗号化方式群は、たとえ有効になっていても使用されません。
accept()
から返されたSSLSocket
は、この設定を継承します。
suites
- 有効にするすべての暗号化方式群の名前IllegalArgumentException
- パラメータに指定された暗号化方式群の一部がサポートされない場合、またはパラメータがnullである場合。getSupportedCipherSuites()
, getEnabledCipherSuites()
public abstract String[] getSupportedCipherSuites()
通常は、その一部のみがデフォルトで使用可能になります。デフォルトのサービス品質要件を満たしていない暗号化方式群は、使用不可になります。それらの暗号化方式群は、特殊なアプリケーションで使用します。
getEnabledCipherSuites()
, setEnabledCipherSuites(String [])
public abstract String[] getSupportedProtocols()
getEnabledProtocols()
, setEnabledProtocols(String [])
public abstract String[] getEnabledProtocols()
getSupportedProtocols()
, setEnabledProtocols(String [])
public abstract void setEnabledProtocols(String[] protocols)
プロトコルは、getSupportedProtocols()により、サポート対象としてリストされていなければいけません。このメソッドの呼出しが成功したあと、protocols
パラメータに示されているプロトコルのみが使用可能になります。
accept()
から返されたSSLSocket
は、この設定を継承します。
protocols
- 有効にするすべてのプロトコルの名前。IllegalArgumentException
- パラメータで指定されたプロトコルの1つ以上がサポートされていないか、またはprotocolsパラメータがnullである場合。getEnabledProtocols()
, getSupportedProtocols()
public abstract void setNeedClientAuth(boolean need)
accept
されたサーバー・モードのSSLSockets
が、クライアント認証が必要なように初期構成されるかどうかを制御します。
ソケットのクライアント認証設定は、次のいずれかになります。
setWantClientAuth(boolean)
と異なり、受け入れたソケットのオプションが設定されていて、かつクライアント認証情報が提供されない場合は、ネゴシエーションが停止し、接続が切断されます。
このメソッドを呼び出すと、このメソッドまたはsetWantClientAuth(boolean)
によって行われた以前の設定がすべてオーバーライドされます。
SSLSocket.setNeedClientAuth(boolean)
またはSSLSocket.setWantClientAuth(boolean)
を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。
need
- クライアント認証が必要な場合はtrueに、クライアント認証が不要な場合はfalseに設定される。getNeedClientAuth()
, setWantClientAuth(boolean)
, getWantClientAuth()
, setUseClientMode(boolean)
public abstract boolean getNeedClientAuth()
accept
されたサーバー・モードのSSLSocket
上でクライアント認証が必要な場合はtrueを返します。
SSLSocket.setNeedClientAuth(boolean)
またはSSLSocket.setWantClientAuth(boolean)
を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。
setNeedClientAuth(boolean)
, setWantClientAuth(boolean)
, getWantClientAuth()
, setUseClientMode(boolean)
public abstract void setWantClientAuth(boolean want)
accept
されたサーバー・モードのSSLSockets
が、クライアント認証を要求するように初期構成されるかどうかを制御します。
ソケットのクライアント認証設定は、次のいずれかになります。
setNeedClientAuth(boolean)
と異なり、受け入れたソケットのオプションが設定されていて、かつクライアント認証情報が提供されない場合でも、ネゴシエーションは続行されます。
このメソッドを呼び出すと、このメソッドまたはsetNeedClientAuth(boolean)
によって行われた以前の設定がすべてオーバーライドされます。
SSLSocket.setNeedClientAuth(boolean)
またはSSLSocket.setWantClientAuth(boolean)
を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。
want
- クライアント認証が要求されている場合はtrueに、クライアント認証が不要な場合はfalseに設定される。getWantClientAuth()
, setNeedClientAuth(boolean)
, getNeedClientAuth()
, setUseClientMode(boolean)
public abstract boolean getWantClientAuth()
SSLSocket.setNeedClientAuth(boolean)
またはSSLSocket.setWantClientAuth(boolean)
を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。
setWantClientAuth(boolean)
, setNeedClientAuth(boolean)
, getNeedClientAuth()
, setUseClientMode(boolean)
public abstract void setUseClientMode(boolean mode)
通常、サーバーは自身を認証しますが、クライアントは必ずしもそうとはかぎりません。
新しく受け入れた接続で、SSLクライアント・モードのTCPサーバーを要求することがあります。たとえば、FTPクライアントは、サーバー・ソケットを取得すると、そのソケット上でサーバーからの接続を待機します。FTPクライアントは、サーバーからの接続を受け入れるときに、クライアント・モードのSSLServerSocketを使用します。FTPサーバーは、接続を開始するときにクライアント・モードを無効にしたSSLSocketを使用します。この場合、ハンドシェークを行うときは、既存のSSLセッションが再利用されます。
accept()
から返されたSSLSocket
は、この設定を継承します。
mode
- 新しく受け入れた接続がSSLクライアント・モードを使用する場合はtrue。getUseClientMode()
public abstract boolean getUseClientMode()
setUseClientMode(boolean)
public abstract void setEnableSessionCreation(boolean flag)
accept()
から返されたSSLSocket
は、この設定を継承します。
flag
- セッションを作成できる場合はtrue (デフォルト)。既存のセッションを再開する場合はfalse。getEnableSessionCreation()
public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)
public SSLParameters getSSLParameters()
setSSLParameters(SSLParameters)
public void setSSLParameters(SSLParameters params)
これは次のことを意味します。
params.getCipherSuites()
がnull以外の場合は、その値を使用してsetEnabledCipherSuites()
が呼び出される。params.getProtocols()
がnull以外の場合は、その値を使用してsetEnabledProtocols()
が呼び出される。params.getNeedClientAuth()
またはparams.getWantClientAuth()
がtrue
を返した場合は、それぞれsetNeedClientAuth(true)
とsetWantClientAuth(true)
が呼び出される。それ以外の場合はsetWantClientAuth(false)
が呼び出される。params.getServerNames()
がnull以外の場合、ソケットはサーバー名をその値で構成する。params.getSNIMatchers()
がnull以外の場合、ソケットはSNIマッチャをその値で構成する。params
- パラメータIllegalArgumentException
- setEnabledCipherSuites()またはsetEnabledProtocols()の呼出しが失敗した場合getSSLParameters()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.