public abstract class SSLSocket extends Socket
Socket
s提供安全套接字使用协议,如“安全套接字层(SSL)和IETF的“传输层安全协议(TLS)”。
这样的插座是正常的流式套接字,但是他们增加一层安全保护,在底层网络传输协议,如TCP。这些保护措施包括:
这种保护是由一个“密码套件”的规定,这是一个由一个给定的SSL连接使用的加密算法。在谈判过程中,两个端点必须在密码套件,在环境中可同意。如果在一般没有这样的套房,没有SSL连接可以建立,也可以交换数据。
使用的加密套件是建立了一种协商的过程称为“握手”。这个过程的目标是创建或加入一个“会话”,这可能会让许多连接时间。握手完成后,您可以通过使用getsession方法访问会话属性。在这个连接上的初始握手可以在三种方式中启动:
startHandshake
明确开始握手,或getSession
试图建立一个会话,如果目前没有有效的会话,和隐含的握手了。如果握手没有以任何理由,SSLSocket
是封闭的,并没有进一步的沟通是可以做到的。
有两组密码套件,你需要知道什么时候管理密码套件:
执行默认值要求只有对服务器进行身份验证的加密套件,并默认情况下为服务器提供保密功能。只有双方明确同意认证和/或非私人(未加密)通信将这样的密码套件选择。
当SSLSocket
s首先创建,没有握手是这样做的,他们应用5月1日沟通偏好:什么密码套件使用套接字是否应该在客户端或服务器模式,然而,安全一直是由应用数据通过连接发送的时间设置。
您可以注册以接收握手完成的事件通知。这涉及到两个额外的类的使用。handshakecompletedevent对象传递给handshakecompletedlistener实例,通过这个API用户注册。SSLSocket
s是由SSLSocketFactory
s,或accept
ing连接从一个SSLServerSocket
。
一个SSL套接字必须选择运行在客户端或服务器模式。这将决定谁开始的握手过程,以及哪些信息应该由每个党派。每个连接必须有一个客户端和一个服务器,或握手不会进展正常。一旦最初的握手开始,插座不能客户端和服务器模式之间切换,即便进行重新谈判。
Socket
,
SSLServerSocket
,
SSLSocketFactory
Modifier | Constructor and Description |
---|---|
protected |
SSLSocket()
仅由子类使用。
|
protected |
SSLSocket(InetAddress address, int port)
仅由子类使用。
|
protected |
SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort)
仅由子类使用。
|
protected |
SSLSocket(String host, int port)
仅由子类使用。
|
protected |
SSLSocket(String host, int port, InetAddress clientAddress, int clientPort)
仅由子类使用。
|
Modifier and Type | Method and Description |
---|---|
abstract void |
addHandshakeCompletedListener(HandshakeCompletedListener listener)
注册一个事件监听器接收SSL握手对这种连接完成的通知。
|
abstract String[] |
getEnabledCipherSuites()
返回正在使用此连接启用SSL加密套件名称。
|
abstract String[] |
getEnabledProtocols()
返回当前启用的用于此连接的协议版本的名称。
|
abstract boolean |
getEnableSessionCreation()
如果新的SSL会话可以通过这个套接字建立返回true。
|
SSLSession |
getHandshakeSession()
返回
SSLSession 是SSL / TLS握手期间建造的。
|
abstract boolean |
getNeedClientAuth()
如果插座将要求客户端认证返回true。
|
abstract SSLSession |
getSession()
返回使用此连接的SSL会话。
|
SSLParameters |
getSSLParameters()
返回此SSLSocket效果sslparameters。
|
abstract String[] |
getSupportedCipherSuites()
返回可以在这个连接上启用的密码套件的名称。
|
abstract String[] |
getSupportedProtocols()
返回该协议可用于SSL连接启用的名字。
|
abstract boolean |
getUseClientMode()
如果插座设置使用客户端模式握手时返回真。
|
abstract boolean |
getWantClientAuth()
如果插座将请求客户端认证返回true。
|
abstract void |
removeHandshakeCompletedListener(HandshakeCompletedListener listener)
移除先前注册的握手完成侦听器。
|
abstract void |
setEnabledCipherSuites(String[] suites)
设置启用此连接的密码套件。
|
abstract void |
setEnabledProtocols(String[] protocols)
设置启用此连接的协议版本。
|
abstract void |
setEnableSessionCreation(boolean flag)
新的SSL会话控制是否可以通过该套接字的建立。
|
abstract void |
setNeedClientAuth(boolean need)
配置插座要求客户端认证。
|
void |
setSSLParameters(SSLParameters params)
适用于sslparameters这个插座。
|
abstract void |
setUseClientMode(boolean mode)
配置的插座使用客户机(或服务器)模式时,握手。
|
abstract void |
setWantClientAuth(boolean want)
配置插座请求客户端认证。
|
abstract void |
startHandshake()
从这个连接SSL握手。
|
bind, close, connect, connect, getChannel, getInetAddress, getInputStream, getKeepAlive, getLocalAddress, getLocalPort, getLocalSocketAddress, getOOBInline, getOutputStream, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoLinger, getSoTimeout, getTcpNoDelay, getTrafficClass, isBound, isClosed, isConnected, isInputShutdown, isOutputShutdown, sendUrgentData, setKeepAlive, setOOBInline, setPerformancePreferences, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSocketImplFactory, setSoLinger, setSoTimeout, setTcpNoDelay, setTrafficClass, shutdownInput, shutdownOutput, toString
protected SSLSocket()
protected SSLSocket(String host, int port) throws IOException, UnknownHostException
如果存在安全管理器,它的checkConnect
方法被称为主机地址和port
作为它的参数。这可能导致SecurityException。
host
名称与主机连接,或
null
为环回地址。
port
-服务器的端口号
IOException
-如果一个I / O错误创建套接字时
SecurityException
-如果存在一个安全管理及其
checkConnect
方法不允许操作。
UnknownHostException
-如果主机不知道
IllegalArgumentException
如果端口外部端口的值指定的范围内,这是0和65535之间,包容。
SecurityManager.checkConnect(java.lang.String, int)
protected SSLSocket(InetAddress address, int port) throws IOException
如果存在安全管理器,它的checkConnect
方法被称为主机地址和port
作为它的参数。这可能导致SecurityException。
address
-服务器的主机
port
-港口
IOException
-如果一个I / O错误创建套接字时
SecurityException
-如果存在一个安全管理及其
checkConnect
方法不允许操作。
IllegalArgumentException
如果端口外部端口的值指定的范围内,这是0和65535之间,包容。
NullPointerException
-如果
address
是空的。
SecurityManager.checkConnect(java.lang.String, int)
protected SSLSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException, UnknownHostException
如果存在安全管理器,它的checkConnect
方法被称为主机地址和port
作为它的参数。这可能导致SecurityException。
host
名称与主机连接,或
null
为环回地址。
port
-服务器的端口号
clientAddress
-客户端地址的套接字绑定,或
null
为
anyLocal
地址。
clientPort
-客户端的端口的套接字绑定到一个系统,或
zero
选择自由港。
IOException
-如果一个I / O错误创建套接字时
SecurityException
-如果存在一个安全管理及其
checkConnect
方法不允许操作。
UnknownHostException
-如果主机不知道
IllegalArgumentException
如果端口或clientport参数超出指定的有效端口值范围,即0和65535之间,包容。
SecurityManager.checkConnect(java.lang.String, int)
protected SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) throws IOException
如果存在安全管理器,它的checkConnect
方法被称为主机地址和port
作为它的参数。这可能导致SecurityException。
address
-服务器的主机
port
-港口
clientAddress
-客户端地址的套接字绑定,或
null
为
anyLocal
地址。
clientPort
-客户端的端口的套接字绑定到一个系统,或
zero
选择自由港。
IOException
-如果一个I / O错误创建套接字时
SecurityException
-如果存在一个安全管理及其
checkConnect
方法不允许操作。
IllegalArgumentException
如果端口或clientport参数超出指定的有效端口值范围,即0和65535之间,包容。
NullPointerException
-如果
address
是空的。
SecurityManager.checkConnect(java.lang.String, int)
public abstract String[] getSupportedCipherSuites()
getEnabledCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract String[] getEnabledCipherSuites()
即使一个套件已启用,它可能永远不会被使用。(例如,对等体不支持它,所需的证书(和私钥)的套件是不可用的,或一个匿名的套件,但需要身份验证。
getSupportedCipherSuites()
,
setEnabledCipherSuites(String [])
public abstract void setEnabledCipherSuites(String[] suites)
在suites
参数每个密码套件必须已上市getsupportedciphersuites(),或方法会失败。继成功调用这个方法,只有在suites
参数上市套房都能使用。
更多信息见getEnabledCipherSuites()
为什么特定的密码套件可能永远不会使用一个连接。
suites
名称的所有密码套件使
IllegalArgumentException
-当一个或更多的密码由参数指定不支持,或者当参数为空。
getSupportedCipherSuites()
,
getEnabledCipherSuites()
public abstract String[] getSupportedProtocols()
public abstract String[] getEnabledProtocols()
setEnabledProtocols(String [])
public abstract void setEnabledProtocols(String[] protocols)
该协议必须被列为支持getSupportedProtocols()
。继成功调用这个方法,只有在protocols
参数上市协议能使用。
protocols
名称的所有协议,使。
IllegalArgumentException
-当一个或更多的协议参数的命名是不支持或当协议参数为空。
getEnabledProtocols()
public abstract SSLSession getSession()
这种方法将启动初始的握手,如果必要的话,然后阻止,直到握手已建立。
如果初始握手过程中发生错误,此方法返回一个无效的会话对象报告无效的密码套件“ssl_null_with_null_null”。
SSLSession
public SSLSession getHandshakeSession()
SSLSession
是SSL / TLS握手期间建造的。
TLS协议可协商的参数,使用这个类的实例时所需要的,但在SSLSession
已经完全初始化,可以通过getSession
。例如,有效签名算法列表可能限制在trustmanager决定使用证书,类型,或最大TLS片段数据包大小可以调整到更好的支持网络环境。
这种方法提供了早期进入SSLSession
构造。根据握手取得的进展,一些数据可能还没有被使用。例如,如果一个远程服务器将发送一个证书链,但链尚未被处理,对SSLSession
的getPeerCertificates
方法将抛出一个sslpeerunverifiedexception。一旦链已被处理,getPeerCertificates
将返回正确的值。
不像getSession()
,此方法不启动初始握手不阻塞直到握手完成。
SSLSession
目前正在协商。
UnsupportedOperationException
-如果基础提供程序不执行操作。
SSLEngine
,
SSLSession
,
ExtendedSSLSession
,
X509ExtendedKeyManager
,
X509ExtendedTrustManager
public abstract void addHandshakeCompletedListener(HandshakeCompletedListener listener)
listener
-握手完成事件监听器
IllegalArgumentException
-如果参数为空。
startHandshake()
,
removeHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void removeHandshakeCompletedListener(HandshakeCompletedListener listener)
listener
-握手完成事件监听器
IllegalArgumentException
如果听者没有注册,或参数为null。
addHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void startHandshake() throws IOException
如果数据已被发送到连接上,则在这个握手过程中继续流。当握手完成时,将在事件中发出信号。此方法是同步的,在一个连接上的初始握手和返回时,协商的握手是完整的。有些协议不支持多个握手在现有插座可能抛出IOException。
IOException
-
addHandshakeCompletedListener(HandshakeCompletedListener)
public abstract void setUseClientMode(boolean mode)
这种方法必须在任何握手时称为。一次握手开始,模式不能对这种插座寿命复位。
服务器通常对自己进行身份验证,而客户端不需要这样做。
mode
-如果插座要握手“客户端”模式
IllegalArgumentException
-如果一个模式的变化是试图在最初的握手开始。
getUseClientMode()
public abstract boolean getUseClientMode()
setUseClientMode(boolean)
public abstract void setNeedClientAuth(boolean need)
套接字的客户端身份验证设置为以下几个:
不像setWantClientAuth(boolean)
,如果设置了此选项,客户端不提供关于本身,认证信息谈判将停止,连接将被删除。
调用此方法重写这个方法或setWantClientAuth(boolean)
做出任何以前的设置。
need
-设置为true,如果客户需要身份验证,或假如果没有客户端认证要求。
getNeedClientAuth()
,
setWantClientAuth(boolean)
,
getWantClientAuth()
,
setUseClientMode(boolean)
public abstract boolean getNeedClientAuth()
setNeedClientAuth(boolean)
,
setWantClientAuth(boolean)
,
getWantClientAuth()
,
setUseClientMode(boolean)
public abstract void setWantClientAuth(boolean want)
套接字的客户端身份验证设置为以下几个:
不像setNeedClientAuth(boolean)
,如果设置了此选项,客户端不提供自己的认证信息,谈判将继续。
调用此方法重写这个方法或setNeedClientAuth(boolean)
做出任何以前的设置。
want
-设置为true,如果要求客户端身份验证,或假如果没有客户端认证要求。
getWantClientAuth()
,
setNeedClientAuth(boolean)
,
getNeedClientAuth()
,
setUseClientMode(boolean)
public abstract boolean getWantClientAuth()
setNeedClientAuth(boolean)
,
getNeedClientAuth()
,
setWantClientAuth(boolean)
,
setUseClientMode(boolean)
public abstract void setEnableSessionCreation(boolean flag)
flag
真表明会话可能被创造;这是默认的。错误表示必须恢复现有会话
getEnableSessionCreation()
public abstract boolean getEnableSessionCreation()
setEnableSessionCreation(boolean)
public SSLParameters getSSLParameters()
public void setSSLParameters(SSLParameters params)
这意味着:
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()调用失败
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.