- java.lang.Object
-
- java.net.ServerSocket
-
- javax.net.ssl.SSLServerSocket
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
public abstract class SSLServerSocket extends ServerSocket
此类扩展了ServerSocket
s,并使用安全套接字层(SSL)或传输层安全(TLS)协议等协议提供安全的服务器套接字。此类的实例通常使用
SSLServerSocketFactory
创建。SSLServerSocket
的主要功能是通过accept
连接创建SSLSocket
。SSLServerSocket
包含几个状态数据,由套接字创建的SSLSocket
继承。 这些包括启用的密码套件和协议,无论客户端认证是否必要,以及创建的套接字是否应在客户端或服务器模式下开始握手。 创建的SSLSocket
继承的状态可以通过调用适当的方法来覆盖。- 从以下版本开始:
- 1.4
- 另请参见:
-
ServerSocket
,SSLSocket
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
SSLServerSocket()
仅由子类使用。protected
SSLServerSocket(int port)
仅由子类使用。protected
SSLServerSocket(int port, int backlog)
仅由子类使用。protected
SSLServerSocket(int port, int backlog, InetAddress address)
仅由子类使用。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 abstract String[]
getEnabledCipherSuites()
返回当前允许新接受连接使用的密码套件列表。abstract String[]
getEnabledProtocols()
返回当前启用以便新接受的连接使用的协议的名称。abstract boolean
getEnableSessionCreation()
如果可以通过从该服务器套接字创建的套接字建立新的SSL会话,则返回true。abstract boolean
getNeedClientAuth()
如果客户端认证将 需要新的accept
服务器模式SSLSocket
s,则返回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
以 请求客户端身份验证。-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from class java.net.ServerSocket
accept, bind, bind, close, getChannel, getInetAddress, getLocalPort, getLocalSocketAddress, getOption, getReceiveBufferSize, getReuseAddress, getSoTimeout, implAccept, isBound, isClosed, setOption, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSocketFactory, setSoTimeout, supportedOptions, toString
-
-
-
-
构造方法详细信息
-
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部分找到。 提供者可能会支持此列表中找不到的密码套件名称,也可能不会使用某个密码套件的推荐名称。
SSLSocket
从accept()
返回,继承此设置。- 参数
-
suites
- 要启用的所有密码套件的名称 - 异常
-
IllegalArgumentException
- 当不支持由参数命名的一个或多个密码时,或当参数为空时。 - 另请参见:
-
getSupportedCipherSuites()
,getEnabledCipherSuites()
-
getSupportedCipherSuites
public abstract String[] getSupportedCipherSuites()
返回可以在SSL连接上使用的密码套件的名称。通常,默认情况下实际上只能启用这些子集,因为此列表可能包括不符合这些默认值的服务质量要求的密码套件。 这样的密码套件在专门的应用中是有用的。
返回的阵列包括来自Java加密体系结构标准算法名称文档的JSSE Cipher Suite Names部分中的标准密码套件名称列表的密码套件,还可以包括提供商支持的其他密码套件。
- 结果
- 一组加密套件名称
- 另请参见:
-
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
参数中列出的协议才能使用。SSLSocket
从accept()
返回,继承此设置。- 参数
-
protocols
- 启用的所有协议的名称。 - 异常
-
IllegalArgumentException
- 当一个或多个由参数命名的协议不受支持或协议参数为空时。 - 另请参见:
-
getEnabledProtocols()
,getSupportedProtocols()
-
setNeedClientAuth
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)
-
getNeedClientAuth
public abstract boolean getNeedClientAuth()
如果新的accept
ed服务器模式SSLSocket
s 需要客户端认证,则返回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客户端将以“客户端”模式使用SSLServerSocket接受反向连接,而FTP服务器使用禁用“客户端”模式的SSLSocket启动连接。 在结果握手期间,现有的SSL会话可能被重用。
SSLSocket
从accept()
返回,继承此设置。- 参数
-
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()
- 如果
-
-