クラスSSLServerSocket

java.lang.Object
java.net.ServerSocket
javax.net.ssl.SSLServerSocket
すべての実装されたインタフェース:
Closeable, AutoCloseable

public abstract class SSLServerSocket extends ServerSocket
このクラスはServerSocketを拡張し、セキュア・ソケット・レイヤー(SSL)やTransport Layer Security (TLS)プロトコルなどのプロトコルを使用して、安全なサーバー・ソケットを提供します。

このクラスのインスタンスは、通常、SSLServerSocketFactoryを使用して作成されます。 SSLServerSocketの主な機能は、accept ing接続によってSSLSocketを作成することです。

SSLServerSocketには、ソケット作成時にSSLSocketに継承されるいくつかの状態データが含まれています。 たとえば、有効になっている暗号化方式群とプロトコル、クライアント認証が必要かどうか、このソケットがハンドシェークを開始するときのモード(クライアント・モードまたはサーバー・モード)、などの情報が継承されます。 作成されたSSLSocketによって継承された状態は、適切なメソッドを呼び出すことによってオーバーライドできます。

導入されたバージョン:
1.4
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    サブクラスでだけ使用されます。
    protected
    SSLServerSocket(int port)
    サブクラスでだけ使用されます。
    protected
    SSLServerSocket(int port, int backlog)
    サブクラスでだけ使用されます。
    protected
    SSLServerSocket(int port, int backlog, InetAddress address)
    サブクラスでだけ使用されます。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract String[]
    新しく受け入れた接続で現在使用可能になっている暗号化方式群のリストを返します。
    abstract String[]
    新しく受け入れた接続で現在使用可能になっているプロトコル名を返します。
    abstract boolean
    このサーバー・ソケットから作成されたソケットで、新しいSSLセッションを確立する場合はtrueを返します。
    abstract boolean
    新しくacceptされたサーバー・モードのSSLSocket上でクライアント認証が必要な場合はtrueを返します。
    新しく受け入れられた接続で有効なSSLParametersを返します。
    abstract String[]
    SSL接続で使用可能にできる暗号化方式群の名前を返します。
    abstract String[]
    使用可能にできるプロトコルの名前を返します。
    abstract boolean
    受け入れた接続がSSLクライアント・モードになる場合はtrueを返します。
    abstract boolean
    新しく受け入れられたサーバー・モードの接続上でクライアント認証が要求される場合はtrueを返します。
    abstract void
    受け入れられた接続で使用可能な暗号化方式群を設定します。
    abstract void
    受け入れた接続で使用可能なプロトコルを制御します。
    abstract void
    このサーバー・ソケットから作成されたソケットで、新しいSSLセッションを確立すかどうかを制御します。
    abstract void
    setNeedClientAuth(boolean need)
    acceptされたサーバー・モードのSSLSocketsが、クライアント認証が必要なように初期構成されるかどうかを制御します。
    void
    新しく受け入れられた接続にSSLParametersを適用します。
    abstract void
    setUseClientMode(boolean mode)
    受け入れた接続がデフォルトでSSLサーバー・モードになるか、SSLクライアント・モードになるかを制御します。
    abstract void
    setWantClientAuth(boolean want)
    acceptされたサーバー・モードのSSLSocketsが、クライアント認証を要求するように初期構成されるかどうかを制御します。

    クラスで宣言されたメソッド ServerSocket

    accept, bind, bind, close, getChannel, getInetAddress, getLocalPort, getLocalSocketAddress, getOption, getReceiveBufferSize, getReuseAddress, getSoTimeout, implAccept, isBound, isClosed, setOption, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSocketFactory, setSoTimeout, supportedOptions, toString
    修飾子と型
    メソッド
    説明
    このソケットに対する接続要求を待機し、それを受け取ります。
    void
    bind(SocketAddress endpoint)
    ServerSocketを特定のアドレス(IPアドレスおよびポート番号)にバインドします。
    void
    bind(SocketAddress endpoint, int backlog)
    ServerSocketを特定のアドレス(IPアドレスおよびポート番号)にバインドします。
    void
    このソケットを閉じます。
    このソケットに関連付けられた一意のServerSocketChannelオブジェクトを返します(存在する場合)。
    このサーバー・ソケットのローカル・アドレスを返します。
    int
    このソケットが接続を待機中のポート番号を返します。
    このソケットのバインド先の端点のアドレスを返します。
    <T> T
    ソケット・オプションの値を返します。
    int
    このServerSocketで使われるSO_RCVBUFオプションの値を取得します。これは、このServerSocketから受け取るソケットに使用される推奨バッファ・サイズです。
    boolean
    SO_REUSEADDRが有効かどうかを調べます。
    int
    Retrieve setting for SO_TIMEOUT.このオプションが無効(タイム・アウトが無限)の場合は0を返します。
    protected final void
    ServerSocketのサブクラスは、このメソッドを使ってaccept()をオーバーライドすることで、独自のサブクラスのソケットが返されるようにします。
    boolean
    ServerSocketのバインディング状態を返します。
    boolean
    ServerSocketの閉じた状態を返します。
    setOption(SocketOption<T> name, T value)
    ソケット・オプションの値を設定します。
    void
    setPerformancePreferences(int connectionTime, int latency, int bandwidth)
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    この方法は、現在廃止されているプロトコルを許可することを目的としています。
    void
    このServerSocketから受け入れられたソケットのSO_RCVBUFオプションのデフォルト推奨値を設定します。
    void
    setReuseAddress(boolean on)
    SO_REUSEADDRソケット・オプションを有効または無効にします。
    static void
    非推奨。
    ServerSocketFactoryおよびサブクラスServerSocketを直接使用します。
    void
    setSoTimeout(int timeout)
    指定されたタイムアウト(ミリ秒)を使ってSO_TIMEOUTを有効または無効にします。
    このサーバー・ソケットでサポートされているソケット・オプションのセットを返します。
    このソケットの実装アドレスと実装ポートをStringとして返します。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • SSLServerSocket

      protected SSLServerSocket() throws IOException
      サブクラスでだけ使用されます。

      デフォルトの認証コンテキストを使用して、バインドされていないTCPサーバー・ソケットを作成します。

      スロー:
      IOException - ソケットの作成時に入出力エラーが発生した場合
    • SSLServerSocket

      protected SSLServerSocket(int port) throws IOException
      サブクラスでだけ使用されます。

      デフォルトの認証コンテキストを使用して、ポート上にTCPサーバー・ソケットを作成します。 キューに格納される接続バックログの最大数は、デフォルトで50に設定されています。キュー内の接続要求が最大数を超えると、新しい接続要求は拒否されます。

      ポート番号に0を指定すると、いずれかの空いているポート上でソケットが作成されます。

      パラメータ:
      port - 待機するポート
      スロー:
      IOException - ソケットの作成時に入出力エラーが発生した場合
      IllegalArgumentException - portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。
    • SSLServerSocket

      protected SSLServerSocket(int port, int backlog) throws IOException
      サブクラスでだけ使用されます。

      デフォルトの認証コンテキストと、指定された接続バックログを使用して、ポート上にTCPサーバー・ソケットを作成します。

      ポート番号に0を指定すると、いずれかの空いているポート上でソケットが作成されます。

      backlog引数は、ソケットの保留されている接続の要求された最大数です。 正確なセマンティックスは実装に固有です。 特に、実装には最大長がかかる場合や、パラメータをすべて無視することを選択できる場合があります。 指定される値は0より大きくなければいけません。 0以下の場合は、実装固有のデフォルトが使用されます。

      パラメータ:
      port - 待機するポート
      backlog - 着信接続のキューの要求された最大長。
      スロー:
      IOException - ソケットの作成時に入出力エラーが発生した場合
      IllegalArgumentException - portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。
    • SSLServerSocket

      protected SSLServerSocket(int port, int backlog, InetAddress address) throws IOException
      サブクラスでだけ使用されます。

      デフォルトの認証コンテキスト、指定された接続バックログ、および指定されたネットワーク・インタフェースを使用して、ポート上にTCPサーバー・ソケットを作成します。 このコンストラクタは、ファイアウォールやルーターとして使用されるマルチホーム・ホスト上で使用され、ネットワーク・サービスを提供するインタフェースを制御します。

      ポート番号に0を指定すると、いずれかの空いているポート上でソケットが作成されます。

      backlog引数は、ソケットの保留されている接続の要求された最大数です。 正確なセマンティックスは実装に固有です。 特に、実装には最大長がかかる場合や、パラメータをすべて無視することを選択できる場合があります。 指定される値は0より大きくなければいけません。 0以下の場合は、実装固有のデフォルトが使用されます。

      addressがnullの場合、これはデフォルトで、任意の(すべての)ローカル・アドレス上の接続を受け入れます。

      パラメータ:
      port - 待機するポート
      backlog - 着信接続のキューの要求された最大長。
      address - 接続を受け入れるネットワーク・インタフェースのアドレス
      スロー:
      IOException - ソケットの作成時に入出力エラーが発生した場合
      IllegalArgumentException - portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。
  • メソッドの詳細

    • getEnabledCipherSuites

      public abstract String[] getEnabledCipherSuites()
      新しく受け入れた接続で現在使用可能になっている暗号化方式群のリストを返します。

      このリストが明示的に変更されていない場合は、システム・デフォルトにより、使用可能なすべての暗号化方式群で、最小限のサービス品質が保証されます。

      スイートが有効になっている場合でも、使用されないことがあります。 これは、ピアがそれをサポートしていないか、その使用が制限されているか、スイートに必要な証明書 (秘密キー)が使用できないか、または匿名スイートが有効になっているが認証が必要な場合に発生することがあります。

      返される配列には、Java Security Standard Algorithm Names Specificationの「JSSE暗号スイート名」セクションにある標準の暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートが含まれる場合もあります。

      戻り値:
      使用可能な暗号化方式群の配列
      外部仕様
      関連項目:
    • setEnabledCipherSuites

      public abstract void setEnabledCipherSuites(String[] suites)
      受け入れられた接続で使用可能な暗号化方式群を設定します。

      暗号化方式群は、getSupportedCipherSuites()により、サポート対象としてリストされていなければいけません。 このメソッドの呼出しが成功したあと、suitesパラメータに示されている暗号化方式群のみが使用可能になります。

      このServerSocketの認証コンテキストで使用できない認証情報を要求する暗号化方式群は、たとえ有効になっていても使用されません。

      暗号スイート名の標準のリストは、JavaセキュリティStandardアルゴリズム名の仕様の「JSSE暗号スイート名」セクションにあります。 プロバイダは、このリストにない暗号スイート名をサポートするか、特定の暗号スイートに推奨名を使用しない場合があります。

      accept()から返されたSSLSocketは、この設定を継承します。

      パラメータ:
      suites - 有効にするすべての暗号化方式群の名前
      スロー:
      IllegalArgumentException - パラメータに指定された暗号化方式群の一部がサポートされない場合、またはパラメータがnullである場合。
      外部仕様
      関連項目:
    • getSupportedCipherSuites

      public abstract String[] getSupportedCipherSuites()
      SSL接続で使用可能にできる暗号化方式群の名前を返します。

      通常は、その一部のみがデフォルトで使用可能になります。デフォルトのサービス品質要件を満たしていない暗号化方式群は、使用不可になります。 それらの暗号化方式群は、特殊なアプリケーションで使用します。

      返される配列には、Java Security Standard Algorithm Names Specificationの「JSSE暗号スイート名」セクションにある標準の暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートが含まれる場合もあります。

      戻り値:
      暗号化方式群名の配列
      外部仕様
      関連項目:
    • getSupportedProtocols

      public abstract String[] getSupportedProtocols()
      使用可能にできるプロトコルの名前を返します。
      戻り値:
      サポートされているプロトコル名の配列
      関連項目:
    • getEnabledProtocols

      public abstract String[] getEnabledProtocols()
      新しく受け入れた接続で現在使用可能になっているプロトコル名を返します。

      プロトコルは、有効になっている場合でも、決して使用できません。 これは、ピアがプロトコルをサポートしていないか、その使用が制限されているか、またはプロトコルでサポートされている有効な暗号スイートがない場合に発生する可能性があります。

      戻り値:
      プロトコル名の配列
      関連項目:
    • setEnabledProtocols

      public abstract void setEnabledProtocols(String[] protocols)
      受け入れた接続で使用可能なプロトコルを制御します。

      プロトコルは、getSupportedProtocols()により、サポート対象としてリストされていなければいけません。 このメソッドの呼出しが成功したあと、protocolsパラメータに示されているプロトコルのみが使用可能になります。

      accept()から返されたSSLSocketは、この設定を継承します。

      パラメータ:
      protocols - 有効にするすべてのプロトコルの名前。
      スロー:
      IllegalArgumentException - パラメータで指定されたプロトコルの1つ以上がサポートされていないか、またはprotocolsパラメータがnullである場合。
      関連項目:
    • setNeedClientAuth

      public abstract void setNeedClientAuth(boolean need)
      acceptされたサーバー・モードのSSLSocketsが、クライアント認証が必要なように初期構成されるかどうかを制御します。

      ソケットのクライアント認証設定は、次のいずれかになります。

      • クライアント認証を必須にする
      • クライアント認証を要求する
      • クライアント認証を不要にする

      setWantClientAuth(boolean)と異なり、受け入れたソケットのオプションが設定されていて、かつクライアント認証情報が提供されない場合は、ネゴシエーションが停止し、接続が切断されます

      このメソッドを呼び出すと、このメソッドまたはsetWantClientAuth(boolean)によって行われた以前の設定がすべてオーバーライドされます。

      SSLSocket.setNeedClientAuth(boolean)またはSSLSocket.setWantClientAuth(boolean)を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。

      パラメータ:
      need - クライアント認証が必要な場合はtrueに、クライアント認証が不要な場合はfalseに設定される。
      関連項目:
    • getNeedClientAuth

      public abstract boolean getNeedClientAuth()
      新しくacceptされたサーバー・モードのSSLSocket上でクライアント認証が必要な場合はtrueを返します。

      SSLSocket.setNeedClientAuth(boolean)またはSSLSocket.setWantClientAuth(boolean)を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。

      戻り値:
      クライアント認証が必須の場合はtrue、クライアント認証が不要な場合はfalse。
      関連項目:
    • setWantClientAuth

      public abstract void setWantClientAuth(boolean want)
      acceptされたサーバー・モードのSSLSocketsが、クライアント認証を要求するように初期構成されるかどうかを制御します。

      ソケットのクライアント認証設定は、次のいずれかになります。

      • クライアント認証を必須にする
      • クライアント認証を要求する
      • クライアント認証を不要にする

      setNeedClientAuth(boolean)と異なり、受け入れたソケットのオプションが設定されていて、かつクライアント認証情報が提供されない場合でも、ネゴシエーションは続行されます

      このメソッドを呼び出すと、このメソッドまたはsetNeedClientAuth(boolean)によって行われた以前の設定がすべてオーバーライドされます。

      SSLSocket.setNeedClientAuth(boolean)またはSSLSocket.setWantClientAuth(boolean)を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。

      パラメータ:
      want - クライアント認証が要求されている場合はtrueに、クライアント認証が不要な場合はfalseに設定される。
      関連項目:
    • getWantClientAuth

      public abstract boolean getWantClientAuth()
      新しく受け入れられたサーバー・モードの接続上でクライアント認証が要求される場合はtrueを返します。

      SSLSocket.setNeedClientAuth(boolean)またはSSLSocket.setWantClientAuth(boolean)を呼び出すことによって、継承された初期の設定がオーバーライドされる可能性があります。

      戻り値:
      クライアント認証が要求された場合はtrue、クライアント認証が不要な場合はfalse。
      関連項目:
    • setUseClientMode

      public abstract void setUseClientMode(boolean mode)
      受け入れた接続がデフォルトでSSLサーバー・モードになるか、SSLクライアント・モードになるかを制御します。

      通常、サーバーは自身を認証しますが、クライアントは必ずしもそうとはかぎりません。

      新しく受け入れた接続で、SSLクライアント・モードのTCPサーバーを要求することがあります。 たとえば、FTPクライアントは、サーバー・ソケットを取得すると、そのソケット上でサーバーからの接続を待機します。 FTPクライアントは、サーバーからの接続を受け入れるときに、クライアント・モードのSSLServerSocketを使用します。FTPサーバーは、接続を開始するときにクライアント・モードを無効にしたSSLSocketを使用します。 この場合、ハンドシェークを行うときは、既存のSSLセッションが再利用されます。

      accept()から返されたSSLSocketは、この設定を継承します。

      パラメータ:
      mode - 新しく受け入れた接続がSSLクライアント・モードを使用する場合はtrue。
      関連項目:
    • getUseClientMode

      public abstract boolean getUseClientMode()
      受け入れた接続がSSLクライアント・モードになる場合はtrueを返します。
      戻り値:
      接続がSSLクライアント・モードを使用する場合はtrue。
      関連項目:
    • setEnableSessionCreation

      public abstract void setEnableSessionCreation(boolean flag)
      このサーバー・ソケットから作成されたソケットで、新しいSSLセッションを確立すかどうかを制御します。

      accept()から返されたSSLSocketは、この設定を継承します。

      パラメータ:
      flag - セッションを作成できる場合はtrue (デフォルト)。既存のセッションを再開する場合はfalse。
      関連項目:
    • getEnableSessionCreation

      public abstract boolean getEnableSessionCreation()
      このサーバー・ソケットから作成されたソケットで、新しいSSLセッションを確立する場合はtrueを返します。
      戻り値:
      セッションを作成できる場合はtrue (デフォルト)。既存のセッションを再開する場合はfalse
      関連項目:
    • getSSLParameters

      public SSLParameters getSSLParameters()
      新しく受け入れられた接続で有効なSSLParametersを返します。 返されるSSLParametersの暗号化方式群とプロトコルは、常にnull以外です。
      戻り値:
      新しく受け入れられた接続で有効なSSLParameters
      導入されたバージョン:
      1.7
      関連項目:
    • setSSLParameters

      public void setSSLParameters(SSLParameters params)
      新しく受け入れられた接続にSSLParametersを適用します。

      これは次のことを意味します。

      • 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()の呼出しが失敗した場合
      導入されたバージョン:
      1.7
      関連項目: