java.lang.Object java.net.ServerSocket javax.net.ssl.SSLServerSocket
public abstract class SSLServerSocket
此类扩展了 ServerSocket
并且提供使用像 Secure Sockets Layer (SSL) 或 Transport Layer Security (TLS) 协议的安全服务器套接字。
此类的实例通常使用 SSLServerSocketFactory
来创建。SSLServerSocket
的主要功能是通过接受
连接来创建 SSLSocket
。
SSLServerSocket
包含了一些状态数据,这些数据在创建套接字时由 SSLSocket
继承。它们包括启用的密码套件和协议、客户端验证是否必需,以及创建的套接字应该以客户端模式还是服务器模式开始握手。可以通过调用适当的方法重写由创建的 SSLSocket
所继承的状态。
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.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
protected SSLServerSocket() throws IOException
使用默认的验证上下文创建未绑定的 TCP 服务器套接字。
IOException
- 如果创建套接字时发生 I/O 错误
protected SSLServerSocket(int port) throws IOException
使用默认的验证上下文在端口上创建 TCP 服务器套接字。连接 backlog 默认为最多可有五十个连接排队,超过此数,系统将拒绝新的连接请求。
port
- 侦听的端口
IOException
- 当创建套接字时出现 I/O 错误
protected SSLServerSocket(int port, int backlog) throws IOException
使用默认的验证上下文和指定的连接 backlog 在端口上创建 TCP 服务器套接字。
port
- 侦听的端口号
backlog
- 在系统应该开始拒绝新的请求前可以挂起的连接数
IOException
- 如果创建套接字时出现 I/O 错误
protected SSLServerSocket(int port, int backlog, InetAddress address) throws IOException
使用默认的验证上下文、指定的连接 backlog 和指定的网络接口在端口上创建 TCP 服务器套接字。此构造方法用在多宿主机(像那些用作防火墙或路由器的主机)上以控制通过哪一个接口提供网络服务。
port
- 侦听的端口号
backlog
- 在系统应该开始拒绝新的请求前可以挂起的连接数
address
- 网络接口的地址,通过此地址接受连接
IOException
- 如果创建套接字时出现 I/O 错误
方法详细信息 |
---|
public abstract String[] getEnabledCipherSuites()
如果没有显式修改此列表,则系统提供的默认值在所有启用的密码套件中保证最低的服务质量。
实际上不使用启用的密码套件有多个原因。例如: 服务器套接字可能没有适当的私钥供它使用或者密码套件可能是匿名的,阻止使用客户端验证,而服务器套接字已经被告知需要那种验证。
getSupportedCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String[] suites)
这些密码套件必须已经由 getSupportedCipherSuites() 作为支持套件列出。在成功调用此方法之后,只有在 suites
参数中列出的套件才会被启用以供连接使用。
对于需要验证信息但这些信息在此 ServerSocket 的验证上下文中不存在的套件,即使已经启用,任何情况下也不会使用它。
从 accept()
返回的 SSLSocket
继承此设置。
suites
- 要启用的所有密码套件名称
IllegalArgumentException
- 当一个或多个由参数命名的密码套件不被支持时,或参数为 null 时。
getSupportedCipherSuites()
,
getEnabledCipherSuites()
public abstract String[] getSupportedCipherSuites()
通常,因为此列表可能包括无法满足默认服务质量要求的密码套件,所以默认情况下实际启动的是这些密码套件的子集。这种密码套件在专门的应用程序中才能有用。
getEnabledCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract String[] getSupportedProtocols()
getEnabledProtocols()
,
setEnabledProtocols(String [])
public abstract String[] getEnabledProtocols()
getSupportedProtocols()
,
setEnabledProtocols(String [])
public abstract void setEnabledProtocols(String[] protocols)
该协议必须已经由 getSupportedProtocols() 将其作为受支持的协议列出。在成功调用此方法之后,仅启用了在 protocols
参数中列出的协议以便使用。
从 accept()
返回的 SSLSocket
继承此设置。
protocols
- 要启用的所有协议的名称。
IllegalArgumentException
- 当一个或多个由参数命名的协议不受支持时,或 protocols 参数为 null时。
getEnabledProtocols()
,
getSupportedProtocols()
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)
public abstract boolean getNeedClientAuth()
accept
的服务器模式的
SSLSocket
要求 客户端验证,则返回 true。
最初继承的设置可以通过调用 SSLSocket.setNeedClientAuth(boolean)
或 SSLSocket.setWantClientAuth(boolean)
来重写。
setNeedClientAuth(boolean)
,
setWantClientAuth(boolean)
,
getWantClientAuth()
,
setUseClientMode(boolean)
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)
public abstract boolean getWantClientAuth()
最初继承的设置可以通过调用 SSLSocket.setNeedClientAuth(boolean)
或 SSLSocket.setWantClientAuth(boolean)
来重写。
setWantClientAuth(boolean)
,
setNeedClientAuth(boolean)
,
getNeedClientAuth()
,
setUseClientMode(boolean)
public abstract void setUseClientMode(boolean mode)
服务器通常对其自己进行验证,不要求客户端也这么做。
有时,TCP 服务器需要以SSL 客户端模式处理新接受的连接,但这种情况比较少见。例如,FTP 客户端在获得服务器套接字的同时侦听是否有来自服务器的反向连接。FTP 客户端将使用 "client" 模式的 SSLServerSocket 来接受反向的连接,而 FTP 服务器使用禁止 "client" 模式的 SSLSocket 来启动连接。在联络期间,可以重用已存在的 SSL 会话。
从 accept()
返回的 SSLSocket
继承此设置。
mode
- 如果新接受的连接应该使用 SSL 客户端模式,则此参数为 true。
getUseClientMode()
public abstract boolean getUseClientMode()
setUseClientMode(boolean)
public abstract void setEnableSessionCreation(boolean flag)
从 accept()
返回的 SSLSocket
继承此设置。
flag
- 为 true 时指示可以创建会话,这是默认的;为 false 时指示必须恢复现有的会话。
getEnableSessionCreation()
public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)