- java.lang.Object
-
- java.net.ServerSocket
-
- javax.net.ssl.SSLServerSocket
-
- 实现的所有接口
-
Closeable
,AutoCloseable
public abstract class SSLServerSocket extends ServerSocket
此类扩展ServerSocket
并使用安全套接字层(SSL)或传输层安全性(TLS)协议等协议提供安全的服务器套接字。通常使用
SSLServerSocketFactory
创建SSLServerSocketFactory
。SSLServerSocket
的主要功能是通过accept
连接创建SSLSocket
s。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
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
ed server-modeSSLSockets
配置为 需要客户端身份验证。void
setSSLParameters(SSLParameters params)
将SSLParameters应用于新接受的连接。abstract void
setUseClientMode(boolean mode)
控制接受的连接是处于(默认)SSL服务器模式还是SSL客户端模式。abstract void
setWantClientAuth(boolean want)
控制是否最初将accept
ed服务器模式SSLSockets
配置为 请求客户端身份验证。-
声明方法的类 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服务器套接字。 在系统开始拒绝新连接请求之前,连接积压默认为排队的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 [])
-
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
- 当不支持参数指定的一个或多个协议或协议参数为null时。 - 另请参见:
-
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
上需要客户端身份验证,则返回true。可以通过调用
SSLSocket.setNeedClientAuth(boolean)
或SSLSocket.setWantClientAuth(boolean)
覆盖初始继承的设置。- 结果
- 如果需要客户端身份验证,则为true;如果不需要客户端身份验证,则为false
- 另请参见:
-
setNeedClientAuth(boolean)
,setWantClientAuth(boolean)
,getWantClientAuth()
,setUseClientMode(boolean)
-
setWantClientAuth
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)
-
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会话。
从
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()
回报true
,setNeedClientAuth(true)
和setWantClientAuth(true)
被称为,分别; 否则setWantClientAuth(false)
。 - 如果
params.getServerNames()
为非null,则套接字将使用该值配置其服务器名称。 - 如果
params.getSNIMatchers()
为非null,则套接字将使用该值配置其SNI匹配器。
- 参数
-
params
- 参数 - 异常
-
IllegalArgumentException
- 如果setEnabledCipherSuites()或setEnabledProtocols()调用失败 - 从以下版本开始:
- 1.7
- 另请参见:
-
getSSLParameters()
- 如果
-
-