Module  java.base
软件包  javax.net.ssl

Class SSLServerSocket

  • All Implemented Interfaces:
    CloseableAutoCloseable


    public abstract class SSLServerSocket
    extends ServerSocket
    此类扩展了ServerSocket s,并使用安全套接字层(SSL)或传输层安全(TLS)协议等协议提供安全的服务器套接字。

    此类的实例通常使用SSLServerSocketFactory创建。 SSLServerSocket的主要功能是通过accept连接创建SSLSocket

    SSLServerSocket包含几个状态数据,由套接字创建的SSLSocket继承。 这些包括启用的密码套件和协议,无论客户端认证是否必要,以及创建的套接字是否应在客户端或服务器模式下开始握手。 创建的SSLSocket继承的状态可以通过调用适当的方法来覆盖。

    从以下版本开始:
    1.4
    另请参见:
    ServerSocketSSLSocket
    • 构造方法详细信息

      • SSLServerSocket

        protected SSLServerSocket​()
                           throws IOException
        仅由子类使用。

        使用默认身份验证上下文创建未绑定的TCP服务器套接字。

        异常
        IOException - 如果在创建套接字时发生I / O错误
      • SSLServerSocket

        protected SSLServerSocket​(int port)
                           throws IOException
        仅由子类使用。

        使用默认身份验证上下文在端口上创建TCP服务器套接字。 在系统开始拒绝新的连接请求之前,连接备份默认为排队的五十个连接。

        端口号0在任意空闲端口上创建一个套接字。

        如果有一个安全管理器,它的checkListen方法被调用,以port参数作为参数,以确保操作是允许的。 这可能会导致SecurityException。

        参数
        port - 要收听的端口
        异常
        IOException - 创建套接字时是否发生I / O错误
        SecurityException - 如果存在安全管理员,并且其 checkListen方法不允许操作。
        IllegalArgumentException - 如果端口参数超出了在0到65535之间的有效端口值的指定范围(包括0和65535之间)。
        另请参见:
        SecurityManager.checkListen(int)
      • SSLServerSocket

        protected SSLServerSocket​(int port,
                                  int backlog)
                           throws IOException
        仅由子类使用。

        在端口上创建TCP服务器套接字,使用默认身份验证上下文和指定的积压的连接。

        端口号0在任意空闲端口上创建一个套接字。

        backlog参数是套接字上请求的最大挂起连接数。 其确切语义是实现具体的。 特别地,实现可以施加最大长度,或者可以选择忽略参数altogther。 提供的价值应大于0 如果小于或等于0 ,则将使用实现特定的默认值。

        如果有安全管理器,则使用port参数作为参数来调用其checkListen方法,以确保允许操作。 这可能会导致SecurityException。

        参数
        port - 要听的港口
        backlog - 请求进入连接队列的最大长度。
        异常
        IOException - 如果在创建套接字时发生I / O错误
        SecurityException - 如果安全管理器存在,并且其 checkListen方法不允许操作。
        IllegalArgumentException - 如果端口参数超出了介于0和65535之间的有效端口值的指定范围(包括0和65535之间)。
        另请参见:
        SecurityManager.checkListen(int)
      • SSLServerSocket

        protected SSLServerSocket​(int port,
                                  int backlog,
                                  InetAddress address)
                           throws IOException
        仅由子类使用。

        在端口上创建TCP服务器套接字,使用默认身份验证上下文和指定的连接积压以及特定的指定网络接口。 该构造函数用于多宿主主机,例如用于防火墙或路由器的主机,以控制通过哪个接口提供网络服务。

        如果有安全管理器,则使用port参数作为参数来调用其checkListen方法,以确保允许操作。 这可能会导致SecurityException。

        端口号0在任意空闲端口上创建一个套接字。

        backlog参数是套接字上请求的最大挂起连接数。 其确切语义是实现具体的。 特别地,实现可以施加最大长度,或者可以选择忽略参数altogther。 提供的价值应大于0 如果小于或等于0 ,则将使用实现特定的默认值。

        如果地址为空,它将默认接受任何/所有本地地址上的连接。

        参数
        port - 要听的端口
        backlog - 请求进入连接队列的最大长度。
        address - 将接受连接的网络接口的地址
        异常
        IOException - 如果在创建套接字时发生I / O错误
        SecurityException - 如果安全管理器存在,并且其 checkListen方法不允许操作。
        IllegalArgumentException - 如果端口参数超出了介于0和65535之间的有效端口值的指定范围(包括0和65535之间)。
        另请参见:
        SecurityManager.checkListen(int)
    • 方法详细信息

      • getEnabledCipherSuites

        public abstract String[] getEnabledCipherSuites​()
        返回当前允许新接受连接使用的密码套件列表。

        如果此列表尚未被明确修改,则系统提供的默认值保证所有启用的密码套件中的最低服务质量。

        请注意,即使启用套件,也可能永远不会使用。 如果对等体不支持,或者其使用受到限制,或者该套件的必需证书(和私钥)不可用,或者启用匿名套件但需要验证,则可能会发生这种情况。

        返回的数组包括来自Java加密体系结构标准算法名称文档的JSSE Cipher Suite Names部分的标准密码套件名称列表中的密码套件,还可以包括提供商支持的其他密码套件。

        结果
        启用了一系列密码套件
        另请参见:
        getSupportedCipherSuites()setEnabledCipherSuites(String [])
      • setEnabledCipherSuites

        public abstract void setEnabledCipherSuites​(String[] suites)
        设置允许接受连接使用的密码套件。

        密码套件必须由getSupportedCipherSuites()列为受支持的。 成功调用此方法后,只能启用suites参数中列出的suites

        即使启用了在ServerSocket认证上下文中不可用的认证信息的套件也不会被使用。

        请注意,密码套件名称的标准列表可以在Java加密体系结构标准算法名称文档的JSSE Cipher Suite Names部分找到。 提供者可能会支持此列表中找不到的密码套件名称,也可能不会使用某个密码套件的推荐名称。

        SSLSocketaccept()返回,继承此设置。

        参数
        suites - 要启用的所有密码套件的名称
        异常
        IllegalArgumentException - 当不支持由参数命名的一个或多个密码时,或当参数为空时。
        另请参见:
        getSupportedCipherSuites()getEnabledCipherSuites()
      • getSupportedCipherSuites

        public abstract String[] getSupportedCipherSuites​()
        返回可以在SSL连接上使用的密码套件的名称。

        通常,默认情况下实际上只能启用这些子集,因为此列表可能包括不符合这些默认值的服务质量要求的密码套件。 这样的密码套件在专门的应用中是有用的。

        返回的阵列包括来自Java加密体系结构标准算法名称文档的JSSE Cipher Suite Names部分中的标准密码套件名称列表的密码套件,还可以包括提供商支持的其他密码套件。

        结果
        一组加密套件名称
        另请参见:
        getEnabledCipherSuites()setEnabledCipherSuites(String [])
      • getEnabledProtocols

        public abstract String[] getEnabledProtocols​()
        返回当前启用以便新接受的连接使用的协议的名称。

        请注意,即使启用协议,也可能永远不会使用该协议。 如果对等体不支持协议或者限制使用协议,或协议没有启用密码套件,则可能会发生这种情况。

        结果
        一组协议名称
        另请参见:
        getSupportedProtocols()setEnabledProtocols(String [])
      • setEnabledProtocols

        public abstract void setEnabledProtocols​(String[] protocols)
        控制哪些特定协议被接受的连接启用。

        协议必须被getSupportedProtocols()列为受支持。 成功调用此方法后,只有protocols参数中列出的协议才能使用。

        SSLSocketaccept()返回,继承此设置。

        参数
        protocols - 启用的所有协议的名称。
        异常
        IllegalArgumentException - 当一个或多个由参数命名的协议不受支持或协议参数为空时。
        另请参见:
        getEnabledProtocols()getSupportedProtocols()
      • setUseClientMode

        public abstract void setUseClientMode​(boolean mode)
        控制接受的连接是否处于(默认)SSL服务器模式或SSL客户端模式。

        服务器通常认证自己,客户端不需要这样做。

        在极少数情况下,TCP服务器需要在新接受的连接上以SSL客户端模式运行。 例如,FTP客户端获取服务器套接字,并从服务器收听反向连接。 FTP客户端将以“客户端”模式使用SSLServerSocket接受反向连接,而FTP服务器使用禁用“客户端”模式的SSLSocket启动连接。 在结果握手期间,现有的SSL会话可能被重用。

        SSLSocketaccept()返回,继承此设置。

        参数
        mode - 如果新接受的连接应使用SSL客户端模式, mode true。
        另请参见:
        getUseClientMode()
      • getUseClientMode

        public abstract boolean getUseClientMode​()
        如果接受的连接将处于SSL客户端模式,则返回true。
        结果
        如果连接应该使用SSL客户端模式,则为true。
        另请参见:
        setUseClientMode(boolean)
      • setEnableSessionCreation

        public abstract void setEnableSessionCreation​(boolean flag)
        控制是否可以由从此服务器套接字创建的套接字建立新的SSL会话。

        SSLSocket期从返回accept()继承此设置。

        参数
        flag - true表示可以创建会话; 这是默认值。 false表示必须恢复现有会话。
        另请参见:
        getEnableSessionCreation()
      • getEnableSessionCreation

        public abstract boolean getEnableSessionCreation​()
        如果可以通过从该服务器套接字创建的套接字建立新的SSL会话,则返回true。
        结果
        true表示可以创建会话; 这是默认值。 false表示必须恢复现有会话
        另请参见:
        setEnableSessionCreation(boolean)
      • getSSLParameters

        public SSLParameters getSSLParameters​()
        返回对新接受的连接有效的SSLParameters。 返回的SSLParameters的密码和协议始终不为空。
        结果
        对新接受的连接有效的SSLParameters
        从以下版本开始:
        1.7
        另请参见:
        setSSLParameters(SSLParameters)
      • setSSLParameters

        public void setSSLParameters​(SSLParameters params)
        将SSLParameters应用于新接受的连接。

        意即:

        • 如果params.getCipherSuites()为非空值,则使用该值调用setEnabledCipherSuites()
        • 如果params.getProtocols()为非空值,则使用该值调用setEnabledProtocols()
        • 如果params.getNeedClientAuth()params.getWantClientAuth()返回true ,分别称为setNeedClientAuth(true)setWantClientAuth(true) ; 否则setWantClientAuth(false)
        • 如果params.getServerNames()不为空,套接字将使用该值配置其服务器名称。
        • 如果params.getSNIMatchers()为非空值,则套接字将使用该值配置其SNI匹配器。
        参数
        params - 参数
        异常
        IllegalArgumentException - 如果setEnabledCipherSuites()或setEnabledProtocols()调用失败
        从以下版本开始:
        1.7
        另请参见:
        getSSLParameters()