モジュール java.base
パッケージ 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
    関連項目:
    ServerSocket, SSLSocket
    • コンストラクタの詳細

      • SSLServerSocket

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

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

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

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

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

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

        セキュリティ・マネージャが存在する場合、この操作が許可されるように、そのcheckListenメソッドがport引数をその引数として指定して呼び出されます。 この結果、SecurityExceptionがスローされることがあります。

        パラメータ:
        port - 待機するポート
        例外:
        IOException - ソケットの作成時に入出力エラーが発生した場合
        SecurityException - セキュリティ・マネージャが存在し、そのcheckListenメソッドでこの操作が許可されていない場合。
        IllegalArgumentException - portパラメータが指定された有効なポート値の範囲(0から65535)外である場合。
        関連項目:
        SecurityManager.checkListen(int)
      • SSLServerSocket

        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)
      • SSLServerSocket

        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)
    • メソッドの詳細

      • getEnabledCipherSuites

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

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

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

        返される配列には、Java Cryptography Architecture標準アルゴリズム名ドキュメントの「JSSE暗号スイート名」セクションの標準暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートも含まれます。

        戻り値:
        使用可能な暗号化方式群の配列
        関連項目:
        getSupportedCipherSuites(), setEnabledCipherSuites(String [])
      • setEnabledCipherSuites

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

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

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

        暗号スイート名の標準リストは、Java暗号化アーキテクチャの標準アルゴリズム名のドキュメントの「JSSE暗号スイート名」セクションにあります。 プロバイダは、このリストにない暗号スイート名をサポートしているか、特定の暗号スイートの推奨名を使用していない可能性があります。

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

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

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

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

        返される配列には、Java Cryptography Architecture標準アルゴリズム名ドキュメントの「JSSE暗号スイート名」セクションの標準暗号スイート名のリストからの暗号スイートが含まれ、プロバイダがサポートする他の暗号スイートも含まれます。

        戻り値:
        暗号化方式群名の配列
        関連項目:
        getEnabledCipherSuites(), setEnabledCipherSuites(String [])
      • getEnabledProtocols

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

        プロトコルが有効になっていても、決して使用されないことに注意してください。 これは、ピアがプロトコルをサポートしていないか、またはその使用が制限されているか、プロトコルによってサポートされている有効な暗号スイートがない場合に発生します。

        戻り値:
        プロトコル名の配列
        関連項目:
        getSupportedProtocols(), setEnabledProtocols(String [])
      • setEnabledProtocols

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

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

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

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

        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)
      • setWantClientAuth

        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)
      • setUseClientMode

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

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

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

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

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

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

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

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

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

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

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