javax.net.ssl

接口
异常
java.lang.Object
  继承者 java.net.ServerSocket
      继承者 javax.net.ssl.SSLServerSocket

public abstract class SSLServerSocket
     
extends ServerSocket

此类扩展了 ServerSocket 并且提供使用像 Secure Sockets Layer (SSL) 或 Transport Layer Security (TLS) 协议的安全服务器套接字。

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

SSLServerSocket 包含了一些状态数据,这些数据在创建套接字时由 SSLSocket 继承。它们包括启用的密码套件和协议、客户端验证是否必需,以及创建的套接字应该以客户端模式还是服务器模式开始握手。可以通过调用适当的方法重写由创建的 SSLSocket 所继承的状态。

从以下版本开始:
1.4
另请参见:
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。
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)
          控制接受的服务器模式 SSLSocket 是否将在开始时配置为要求 客户端验证。
abstract  void setUseClientMode(boolean mode)
          控制接受的连接是以(默认的)SSL 服务器模式还是在 SSL 客户端模式工作。
abstract  void setWantClientAuth(boolean want)
          控制 accept 服务器模式的 SSLSockets 是否将在开始时配置为请求 客户端验证。
 
从类 java.net.ServerSocket 继承的方法
accept, bind, bind, close, getChannel, getInetAddress, getLocalPort, getLocalSocketAddress, getReceiveBufferSize, getReuseAddress, getSoTimeout, implAccept, isBound, isClosed, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSocketFactory, setSoTimeout, toString
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

SSLServerSocket

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

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

抛出:
IOException - 如果创建套接字时发生 I/O 错误

SSLServerSocket

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

使用默认的验证上下文在端口上创建 TCP 服务器套接字。连接 backlog 默认为最多可有五十个连接排队,超过此数,系统将拒绝新的连接请求。

参数:
port - 侦听的端口
抛出:
IOException - 当创建套接字时出现 I/O 错误

SSLServerSocket

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

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

参数:
port - 侦听的端口号
backlog - 在系统应该开始拒绝新的请求前可以挂起的连接数
抛出:
IOException - 如果创建套接字时出现 I/O 错误

SSLServerSocket

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

使用默认的验证上下文、指定的连接 backlog 和指定的网络接口在端口上创建 TCP 服务器套接字。此构造方法用在多宿主机(像那些用作防火墙或路由器的主机)上以控制通过哪一个接口提供网络服务。

参数:
port - 侦听的端口号
backlog - 在系统应该开始拒绝新的请求前可以挂起的连接数
address - 网络接口的地址,通过此地址接受连接
抛出:
IOException - 如果创建套接字时出现 I/O 错误
方法详细信息

getEnabledCipherSuites

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

如果没有显式修改此列表,则系统提供的默认值在所有启用的密码套件中保证最低的服务质量。

实际上不使用启用的密码套件有多个原因。例如: 服务器套接字可能没有适当的私钥供它使用或者密码套件可能是匿名的,阻止使用客户端验证,而服务器套接字已经被告知需要那种验证。

返回:
启用的密码套件的数组
另请参见:
getSupportedCipherSuites(), setEnabledCipherSuites(String [])

setEnabledCipherSuites

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

这些密码套件必须已经由 getSupportedCipherSuites() 作为支持套件列出。在成功调用此方法之后,只有在 suites 参数中列出的套件才会被启用以供连接使用。

对于需要验证信息但这些信息在此 ServerSocket 的验证上下文中不存在的套件,即使已经启用,任何情况下也不会使用它。

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

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

getSupportedCipherSuites

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

通常,因为此列表可能包括无法满足默认服务质量要求的密码套件,所以默认情况下实际启动的是这些密码套件的子集。这种密码套件在专门的应用程序中才能有用。

返回:
密码套件名称的数组
另请参见:
getEnabledCipherSuites(), setEnabledCipherSuites(String [])

getSupportedProtocols

public abstract String[] getSupportedProtocols()
返回可以启用的协议的名称。

返回:
支持的协议名称的数组
另请参见:
getEnabledProtocols(), setEnabledProtocols(String [])

getEnabledProtocols

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

返回:
协议名称的数组
另请参见:
getSupportedProtocols(), setEnabledProtocols(String [])

setEnabledProtocols

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

该协议必须已经由 getSupportedProtocols() 将其作为受支持的协议列出。在成功调用此方法之后,仅启用了在 protocols 参数中列出的协议以便使用。

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

参数:
protocols - 要启用的所有协议的名称。
抛出:
IllegalArgumentException - 当一个或多个由参数命名的协议不受支持时,或 protocols 参数为 null时。
另请参见:
getEnabledProtocols(), getSupportedProtocols()

setNeedClientAuth

public abstract void setNeedClientAuth(boolean need)
控制 接受的服务器模式 SSLSocket 是否将在开始时配置为 要求 客户端验证。

套接字的客户端验证设置是下面的其中之一:

  • 必需的客户端验证
  • 请求的客户端验证
  • 不需要客户端验证

setWantClientAuth(boolean) 不同,如果设置了接受的套接字的选项并且客户端选择不提供关于自己的验证信息,协商将会停止且连接将被终止

调用此方法会重写由此方法或 setWantClientAuth(boolean) 以前所做的任何设置。

最初继承的设置可以通过调用 SSLSocket.setNeedClientAuth(boolean)SSLSocket.setWantClientAuth(boolean) 来重写。

参数:
need - 如果要求进行客户端验证,则设置为 true;如果不需要客户端验证,则设置为 false。
另请参见:
getNeedClientAuth(), setWantClientAuth(boolean), getWantClientAuth(), setUseClientMode(boolean)

getNeedClientAuth

public abstract boolean getNeedClientAuth()
如果新 accept 的服务器模式的 SSLSocket 要求 客户端验证,则返回 true。

最初继承的设置可以通过调用 SSLSocket.setNeedClientAuth(boolean)SSLSocket.setWantClientAuth(boolean) 来重写。

返回:
如果要求进行客户端验证,返回 true;如果不需要客户端验证,则返回 false。
另请参见:
setNeedClientAuth(boolean), 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)

getWantClientAuth

public abstract boolean getWantClientAuth()
如果新接受的服务器模式的连接 请求 客户端验证,则返回 true。

最初继承的设置可以通过调用 SSLSocket.setNeedClientAuth(boolean)SSLSocket.setWantClientAuth(boolean) 来重写。

返回:
如果请求进行客户端验证,则返回 true;如果不需要客户端验证,则返回 false。
另请参见:
setWantClientAuth(boolean), setNeedClientAuth(boolean), getNeedClientAuth(), setUseClientMode(boolean)

setUseClientMode

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

服务器通常对其自己进行验证,不要求客户端也这么做。

有时,TCP 服务器需要以SSL 客户端模式处理新接受的连接,但这种情况比较少见。例如,FTP 客户端在获得服务器套接字的同时侦听是否有来自服务器的反向连接。FTP 客户端将使用 "client" 模式的 SSLServerSocket 来接受反向的连接,而 FTP 服务器使用禁止 "client" 模式的 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)