模块  java.base
软件包  javax.net.ssl

Class SSLServerSocket

  • 实现的所有接口
    CloseableAutoCloseable

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

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

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

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

      • SSLServerSocket

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

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

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

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

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

        端口号0在任何空闲端口上创建套接字。

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

        参数
        port - 要侦听的端口
        异常
        IOException - 如果在创建套接字时发生I / O错误
        SecurityException - 如果存在安全管理器且其 checkListen方法不允许该操作。
        IllegalArgumentException - 如果port参数超出指定的有效端口值范围,则介于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 - 如果port参数超出指定的有效端口值范围,则介于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 ,则将使用特定于实现的默认值。

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

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

      • getEnabledCipherSuites

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

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

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

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

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

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

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

        需要在此ServerSocket的身份验证上下文中不可用的身份验证信息的套件在任何情况下都不会被使用,即使它们已启用。

        请注意,密码套件名称的标准列表可以在Java Cryptography Architecture标准算法名称文档的JSSE Cipher Suite Names部分中找到。 提供商可能支持此列表中未找到的密码套件名称,或者可能不使用某个密码套件的建议名称。

        accept()返回的SSLSocket s继承此设置。

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

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

        通常,默认情况下实际上仅启用其中的一部分,因为此列表可能包括不符合这些默认值的服务质量要求的密码套件。 这种密码套件在专门的应用中很有用。

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

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

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

        请注意,即使启用了协议,也可能永远不会使用它。 如果对等方不支持协议,或者其使用受到限制,或者协议不支持启用的密码套件,则会发生这种情况。

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

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

        这些协议必须由getSupportedProtocols()列为支持。 成功调用此方法后,仅启用protocols参数中列出的协议。

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

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

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

        服务器通常对自己进行身份验证,并且客户端不需要这样做。

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

        accept()返回的SSLSocket s继承此设置。

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

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

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

        accept()返回的SSLSocket s继承此设置。

        参数
        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()回报truesetNeedClientAuth(true)setWantClientAuth(true)被称为,分别; 否则setWantClientAuth(false)
        • 如果params.getServerNames()为非null,则套接字将使用该值配置其服务器名称。
        • 如果params.getSNIMatchers()为非null,则套接字将使用该值配置其SNI匹配器。
        参数
        params - 参数
        异常
        IllegalArgumentException - 如果setEnabledCipherSuites()或setEnabledProtocols()调用失败
        从以下版本开始:
        1.7
        另请参见:
        getSSLParameters()