public abstract class SSLServerSocket extends ServerSocket
ServerSocket
,并使用安全套接字层(SSL)或传输层安全(TLS)协议等协议提供安全的服务器套接字。
这个类的实例是使用一般创建SSLServerSocketFactory
。 SSLServerSocket
的主要功能是通过accept
创建SSLSocket
s连接。
SSLServerSocket
包含几个状态数据,这些数据在套接字创建时由SSLSocket
。 这些包括启用的密码套件和协议,无论客户端认证是否必要,以及创建的套接字是否应在客户端或服务器模式下开始握手。 创建的SSLSocket
的状态可以通过调用适当的方法来覆盖。
ServerSocket
, SSLSocket
Modifier | Constructor and Description |
---|---|
protected |
SSLServerSocket()
仅由子类使用。
|
protected |
SSLServerSocket(int port)
仅由子类使用。
|
protected |
SSLServerSocket(int port, int backlog)
仅由子类使用。
|
protected |
SSLServerSocket(int port, int backlog, InetAddress address)
仅由子类使用。
|
Modifier and Type | Method and Description |
---|---|
abstract String[] |
getEnabledCipherSuites()
返回当前允许新接受连接使用的密码套件列表。
|
abstract String[] |
getEnabledProtocols()
返回当前启用以便新接受的连接使用的协议的名称。
|
abstract boolean |
getEnableSessionCreation()
如果可以通过从该服务器套接字创建的套接字建立新的SSL会话,则返回true。
|
abstract boolean |
getNeedClientAuth()
如果在新的
accept ed服务器模式
SSLSocket 上
需要客户端认证,则返回true。
|
SSLParameters |
getSSLParameters()
返回对新接受的连接有效的SSLParameters。
|
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)
控制
accept 编辑服务器模式
SSLSockets 是否最初配置为
要求客户端认证。
|
void |
setSSLParameters(SSLParameters params)
将SSLParameters应用于新接受的连接。
|
abstract void |
setUseClientMode(boolean mode)
控制接受的连接是否处于(默认)SSL服务器模式或SSL客户端模式。
|
abstract void |
setWantClientAuth(boolean want)
控制
accept ed服务器模式
SSLSockets 是否最初配置为
请求客户端身份验证。
|
accept, bind, bind, close, getChannel, getInetAddress, getLocalPort, getLocalSocketAddress, getReceiveBufferSize, getReuseAddress, getSoTimeout, implAccept, isBound, isClosed, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSocketFactory, setSoTimeout, toString
protected SSLServerSocket() throws IOException
使用默认身份验证上下文创建一个未绑定的TCP服务器套接字。
IOException
- 如果在创建套接字时发生I / O错误
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)
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)
protected SSLServerSocket(int port, int backlog, InetAddress address) throws IOException
在端口上创建TCP服务器套接字,使用默认身份验证上下文和指定的连接积压以及特定的指定网络接口。 该构造函数用于多宿主主机,例如用于防火墙或路由器的主机,以控制通过哪个接口提供网络服务。
如果有一个安全管理器,它的checkListen
方法被调用,以port
参数作为参数,以确保操作是允许的。 这可能会导致SecurityException。
端口号0
在任意空闲端口上创建一个套接字。
backlog
参数是套接字上请求的最大挂起连接数。 其确切语义是实现具体的。 特别地,实现可以施加最大长度,或者可以选择忽略参数altogther。 提供的值应大于0
。 如果小于或等于0
,则将使用实现特定的默认值。
如果地址为空,它将默认接受任何/所有本地地址上的连接。
port
- 要收听的端口
backlog
- 请求传入连接队列的最大长度。
address
- 将接受连接的网络接口的地址
IOException
- 如果在创建套接字时发生I / O错误
SecurityException
- 如果安全管理器存在,并且其
checkListen
方法不允许操作。
IllegalArgumentException
- 如果端口参数在超出指定范围的有效端口值(介于0和65535之间),包括0和65535之间。
SecurityManager.checkListen(int)
public abstract String[] getEnabledCipherSuites()
如果此列表尚未被明确修改,则系统提供的默认值保证所有启用的密码套件中的最低服务质量。
启用加密套件可能不会被实际使用的原因有几个。 例如:服务器套接字可能没有可用的适当的私钥,或者密码套件可能是匿名的,排除了使用客户端认证,而服务器套接字被告知需要这种认证。
getSupportedCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String[] suites)
密码套件必须由getSupportedCipherSuites()列为受支持的。 成功调用此方法后,只能启用suites
参数中列出的suites
。
即使启用了在ServerSocket认证上下文中不可用的认证信息的套件也不会被使用。
SSLSocket
从accept()
返回,继承了这个设置。
suites
- 要启用的所有密码套件的名称
IllegalArgumentException
- 当不支持由参数命名的一个或多个密码时,或当参数为空时。
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参数中列出的protocols
。
SSLSocket
从accept()
返回,继承了这个设置。
protocols
- 要启用的所有协议的名称。
IllegalArgumentException
- 当一个或多个由参数命名的协议不受支持或协议参数为空时。
getEnabledProtocols()
,
getSupportedProtocols()
public abstract void setNeedClientAuth(boolean need)
accept
ed服务器模式SSLSockets
是否最初配置为需要客户端认证。
套接字的客户端验证设置是以下之一:
与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
s 需要客户端认证,则返回true。
可以通过调用SSLSocket.setNeedClientAuth(boolean)
或SSLSocket.setWantClientAuth(boolean)
来覆盖初始继承的设置。
setNeedClientAuth(boolean)
,
setWantClientAuth(boolean)
,
getWantClientAuth()
,
setUseClientMode(boolean)
public abstract void setWantClientAuth(boolean want)
accept
ED服务器模式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客户端将以“客户端”模式使用SSLServerSocket接受反向连接,而FTP服务器使用禁用“客户端”模式的SSLSocket启动连接。 在结果握手期间,现有的SSL会话可能被重用。
SSLSocket
从accept()
返回继承此设置。
mode
- 如果新接受的连接应使用SSL客户端模式,则为true。
getUseClientMode()
public abstract boolean getUseClientMode()
setUseClientMode(boolean)
public abstract void setEnableSessionCreation(boolean flag)
SSLSocket
从accept()
返回继承此设置。
flag
- true表示可以创建会话;
这是默认值。
false表示必须恢复现有会话。
getEnableSessionCreation()
public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)
public SSLParameters getSSLParameters()
setSSLParameters(SSLParameters)
public void setSSLParameters(SSLParameters params)
意即:
params.getCipherSuites()
为非空,则使用该值调用setEnabledCipherSuites()
。 params.getProtocols()
不为空,则使用该值调用setEnabledProtocols()
。 params.getNeedClientAuth()
或params.getWantClientAuth()
返回true
, setWantClientAuth(true)
分别调用setNeedClientAuth(true)
和setWantClientAuth(true); 否则setWantClientAuth(false)
。 params.getServerNames()
不为空,套接字将使用该值配置其服务器名称。 params.getSNIMatchers()
为非空值,则套接字将使用该值配置其SNI匹配器。 params
- 参数
IllegalArgumentException
- 如果setEnabledCipherSuites()或setEnabledProtocols()调用失败
getSSLParameters()