public abstract class SSLSocket
extends Socket
java.lang.Object | ||
↳ | java.net.Socket | |
↳ | javax.net.ssl.SSLSocket |
该类扩展了 Socket
并使用诸如“安全套接字层”(SSL)或IETF“传输层安全性”(TLS)协议等协议提供安全套接字。
这样的套接字是普通的流套接字,但是它们为基础网络传输协议(如TCP)增加了一层安全保护。 这些保护措施包括:
这些保护由“密码套件”指定,密码套件是给定SSL连接使用的加密算法的组合。 在谈判过程中,两个端点必须同意在两种环境中都可用的密码套件。 如果不存在这样的套件,则不能建立SSL连接,也不能交换数据。
所使用的密码套件由称为“握手”的协商过程建立。 此过程的目标是创建或重新加入“会话”,这可以保护许多连接随着时间的推移。 握手完成后,您可以使用getSession方法访问会话属性。 这种连接的初始握手可以通过以下三种方式之一启动:
startHandshake
which explicitly begins handshakes, or getSession
tries to set up a session if there is no currently valid session, and an implicit handshake is done. 如果由于任何原因握手失败,则 SSLSocket
已关闭,无法进行任何进一步通信。
有两组密码套件,您在管理密码套件时需要了解这些套件:
实施默认要求默认情况下只启用对服务器进行身份验证并提供机密性的密码套件。 只有双方明确同意未经身份验证和/或非私人(未加密)的通信,才会选择这样的密码套件。
当首次创建 SSLSocket
,不会执行握手,以便应用程序可以首先设置其通信首选项:要使用哪些密码套件,套接字是否应处于客户端或服务器模式等。但是,安全始终由应用程序数据通过连接发送。
您可以注册接收握手完成的事件通知。 这涉及使用两个额外的类。 HandshakeCompletedEvent对象被传递给HandshakeCompletedListener实例,由该API的用户注册。 SSLSocket
由SSLSocketFactory
创建,或由accept
由SSLSocketFactory
创建连接SSLServerSocket
。
SSL套接字必须选择在客户端或服务器模式下运行。 这将决定谁开始握手过程,以及每方应发送哪些消息。 每个连接必须有一个客户端和一个服务器,否则握手无法正常进行。 一旦初始握手开始,套接字无法在客户端和服务器模式之间切换,即使在执行重新协商时也是如此。
SSLSocket
从默认获得实例 SSLSocketFactory
, SSLServerSocketFactory
,和 SSLContext
配置如下:
客户套接字:
Protocol | Supported (API Levels) | Enabled by default (API Levels) |
---|---|---|
SSLv3 | 1+ | 1+ |
TLSv1 | 1+ | 1+ |
TLSv1.1 | 16+ | 20+ |
TLSv1.2 | 16+ | 20+ |
服务器插座:
Protocol | Supported (API Levels) | Enabled by default (API Levels) |
---|---|---|
SSLv3 | 1+ | 1–22 |
TLSv1 | 1+ | 1+ |
TLSv1.1 | 16+ | 16+ |
TLSv1.2 | 16+ | 16+ |
与密码套件名称进行操作的方法(例如, getSupportedCipherSuites
, setEnabledCipherSuites
),因为API级别9具有用于密码套件标准名称,如在下面的表中列出。 在API级别9之前,已经使用了非标准(OpenSSL)名称(请参阅下表中的表格)。
Cipher suite | Supported (API Levels) | Enabled by default (API Levels) |
---|---|---|
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA | 9–22 | 9–19 |
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA | 9–22 | 9–19 |
SSL_DHE_DSS_WITH_DES_CBC_SHA | 9–22 | 9–19 |
SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA | 9–22 | 9–19 |
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA | 9–22 | 9–19 |
SSL_DHE_RSA_WITH_DES_CBC_SHA | 9–22 | 9–19 |
SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA | 9–22 | |
SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 | 9–22 | |
SSL_DH_anon_WITH_3DES_EDE_CBC_SHA | 9–22 | |
SSL_DH_anon_WITH_DES_CBC_SHA | 9–22 | |
SSL_DH_anon_WITH_RC4_128_MD5 | 9–22 | |
SSL_RSA_EXPORT_WITH_DES40_CBC_SHA | 9–22 | 9–19 |
SSL_RSA_EXPORT_WITH_RC4_40_MD5 | 9–22 | 9–19 |
SSL_RSA_WITH_3DES_EDE_CBC_SHA | 9+ | 9–19 |
SSL_RSA_WITH_DES_CBC_SHA | 9–22 | 9–19 |
SSL_RSA_WITH_NULL_MD5 | 9–22 | |
SSL_RSA_WITH_NULL_SHA | 9–22 | |
SSL_RSA_WITH_RC4_128_MD5 | 9+ | 9–19 |
SSL_RSA_WITH_RC4_128_SHA | 9+ | 9–23 |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA | 9–22 | 9–22 |
TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 | 20–22 | |
TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 | 20–22 | |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA | 9–22 | 11–22 |
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 | 20–22 | |
TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 | 20–22 | |
TLS_DHE_RSA_WITH_AES_128_CBC_SHA | 9+ | 9+ |
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 | 20+ | |
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | 20+ | 20+ |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA | 9+ | 11+ |
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 | 20+ | |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | 20+ | 20+ |
TLS_DH_anon_WITH_AES_128_CBC_SHA | 9–22 | |
TLS_DH_anon_WITH_AES_128_CBC_SHA256 | 20–22 | |
TLS_DH_anon_WITH_AES_128_GCM_SHA256 | 20–22 | |
TLS_DH_anon_WITH_AES_256_CBC_SHA | 9–22 | |
TLS_DH_anon_WITH_AES_256_CBC_SHA256 | 20–22 | |
TLS_DH_anon_WITH_AES_256_GCM_SHA384 | 20–22 | |
TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA | 11–22 | 11–19 |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA | 11+ | 11+ |
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | 20+ | |
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | 20+ | 20+ |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA | 11+ | 11+ |
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 | 20+ | |
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | 20+ | 20+ |
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 | 24+ | 24+ |
TLS_ECDHE_ECDSA_WITH_NULL_SHA | 11–22 | |
TLS_ECDHE_ECDSA_WITH_RC4_128_SHA | 11+ | 11–23 |
TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA | 21+ | 21+ |
TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA | 21+ | 21+ |
TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 | 24+ | 24+ |
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA | 11–22 | 11–19 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | 11+ | 11+ |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | 20+ | |
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | 20+ | 20+ |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | 11+ | 11+ |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | 20+ | |
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | 20+ | 20+ |
TLS_ECDHE_RSA_WITH_NULL_SHA | 11–22 | |
TLS_ECDHE_RSA_WITH_RC4_128_SHA | 11+ | 11–23 |
TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA | 11–22 | 11–19 |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA | 11–22 | 11–19 |
TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 | 20–22 | |
TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 | 20–22 | |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA | 11–22 | 11–19 |
TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 | 20–22 | |
TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 | 20–22 | |
TLS_ECDH_ECDSA_WITH_NULL_SHA | 11–22 | |
TLS_ECDH_ECDSA_WITH_RC4_128_SHA | 11–22 | 11–19 |
TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA | 11–22 | 11–19 |
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA | 11–22 | 11–19 |
TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 | 20–22 | |
TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 | 20–22 | |
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA | 11–22 | 11–19 |
TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 | 20–22 | |
TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 | 20–22 | |
TLS_ECDH_RSA_WITH_NULL_SHA | 11–22 | |
TLS_ECDH_RSA_WITH_RC4_128_SHA | 11–22 | 11–19 |
TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA | 11–22 | |
TLS_ECDH_anon_WITH_AES_128_CBC_SHA | 11–22 | |
TLS_ECDH_anon_WITH_AES_256_CBC_SHA | 11–22 | |
TLS_ECDH_anon_WITH_NULL_SHA | 11–22 | |
TLS_ECDH_anon_WITH_RC4_128_SHA | 11–22 | |
TLS_EMPTY_RENEGOTIATION_INFO_SCSV | 11+ | 11+ |
TLS_FALLBACK_SCSV | 21+ | |
TLS_PSK_WITH_3DES_EDE_CBC_SHA | 21–22 | |
TLS_PSK_WITH_AES_128_CBC_SHA | 21+ | 21+ |
TLS_PSK_WITH_AES_256_CBC_SHA | 21+ | 21+ |
TLS_PSK_WITH_RC4_128_SHA | 21+ | |
TLS_RSA_WITH_AES_128_CBC_SHA | 9+ | 9+ |
TLS_RSA_WITH_AES_128_CBC_SHA256 | 20+ | |
TLS_RSA_WITH_AES_128_GCM_SHA256 | 20+ | 20+ |
TLS_RSA_WITH_AES_256_CBC_SHA | 9+ | 11+ |
TLS_RSA_WITH_AES_256_CBC_SHA256 | 20+ | |
TLS_RSA_WITH_AES_256_GCM_SHA384 | 20+ | 20+ |
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 | 24+ | 24+ |
TLS_RSA_WITH_NULL_SHA256 | 20–22 |
注 :PSK密码套件默认情况下只有在启用 SSLContext
通过创建该插座已经初始化为 PSKKeyManager
。
API级别1到8为密码套件使用OpenSSL名称。 下表列出了这些OpenSSL名称及其在API级别9和更新版本中使用的相应标准名称。
OpenSSL cipher suite | Standard cipher suite | Supported (API Levels) | Enabled by default (API Levels) |
---|---|---|---|
AES128-SHA | TLS_RSA_WITH_AES_128_CBC_SHA | 1+ | 1+ |
AES256-SHA | TLS_RSA_WITH_AES_256_CBC_SHA | 1+ | 1–8, 11+ |
DES-CBC-MD5 | SSL_CK_DES_64_CBC_WITH_MD5 | 1–8 | 1–8 |
DES-CBC-SHA | SSL_RSA_WITH_DES_CBC_SHA | 1–22 | 1–19 |
DES-CBC3-MD5 | SSL_CK_DES_192_EDE3_CBC_WITH_MD5 | 1–8 | 1–8 |
DES-CBC3-SHA | SSL_RSA_WITH_3DES_EDE_CBC_SHA | 1+ | 1–19 |
DHE-DSS-AES128-SHA | TLS_DHE_DSS_WITH_AES_128_CBC_SHA | 1–22 | 1–22 |
DHE-DSS-AES256-SHA | TLS_DHE_DSS_WITH_AES_256_CBC_SHA | 1–22 | 1–8, 11–22 |
DHE-RSA-AES128-SHA | TLS_DHE_RSA_WITH_AES_128_CBC_SHA | 1+ | 1+ |
DHE-RSA-AES256-SHA | TLS_DHE_RSA_WITH_AES_256_CBC_SHA | 1+ | 1–8, 11+ |
EDH-DSS-DES-CBC-SHA | SSL_DHE_DSS_WITH_DES_CBC_SHA | 1–22 | 1–19 |
EDH-DSS-DES-CBC3-SHA | SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA | 1–22 | 1–19 |
EDH-RSA-DES-CBC-SHA | SSL_DHE_RSA_WITH_DES_CBC_SHA | 1–22 | 1–19 |
EDH-RSA-DES-CBC3-SHA | SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA | 1–22 | 1–19 |
EXP-DES-CBC-SHA | SSL_RSA_EXPORT_WITH_DES40_CBC_SHA | 1–22 | 1–19 |
EXP-EDH-DSS-DES-CBC-SHA | SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA | 1–22 | 1–19 |
EXP-EDH-RSA-DES-CBC-SHA | SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA | 1–22 | 1–19 |
EXP-RC2-CBC-MD5 | SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 | 1–8 | 1–8 |
EXP-RC4-MD5 | SSL_RSA_EXPORT_WITH_RC4_40_MD5 | 1–22 | 1–19 |
RC2-CBC-MD5 | SSL_CK_RC2_128_CBC_WITH_MD5 | 1–8 | 1–8 |
RC4-MD5 | SSL_RSA_WITH_RC4_128_MD5 | 1+ | 1–19 |
RC4-SHA | SSL_RSA_WITH_RC4_128_SHA | 1+ | 1–23 |
Protected constructors |
|
---|---|
SSLSocket() 仅用于子类。 |
|
SSLSocket(String host, int port) 仅用于子类。 |
|
SSLSocket(InetAddress address, int port) 仅用于子类。 |
|
SSLSocket(String host, int port, InetAddress clientAddress, int clientPort) 仅用于子类。 |
|
SSLSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) 仅用于子类。 |
Public methods |
|
---|---|
abstract void |
addHandshakeCompletedListener(HandshakeCompletedListener listener) 注册一个事件侦听器以接收SSL握手在此连接上完成的通知。 |
abstract boolean |
getEnableSessionCreation() 如果此套接字可能建立新的SSL会话,则返回true。 |
abstract String[] |
getEnabledCipherSuites() 返回当前启用以用于此连接的SSL密码套件的名称。 |
abstract String[] |
getEnabledProtocols() 返回当前在此连接上启用的协议版本的名称。 |
SSLSession |
getHandshakeSession() 返回在SSL / TLS握手期间构造的 |
abstract boolean |
getNeedClientAuth() 如果套接字 需要客户端身份验证,则返回true。 |
SSLParameters |
getSSLParameters() 返回对此SSLSocket有效的SSLParameters。 |
abstract SSLSession |
getSession() 返回此连接使用的SSL会话。 |
abstract String[] |
getSupportedCipherSuites() 返回可用于此连接的密码套件的名称。 |
abstract String[] |
getSupportedProtocols() 返回可用于SSL连接的协议的名称。 |
abstract boolean |
getUseClientMode() 如果套接字在握手时被设置为使用客户端模式,则返回true。 |
abstract boolean |
getWantClientAuth() 如果套接字将 请求客户机认证,则返回true。 |
abstract void |
removeHandshakeCompletedListener(HandshakeCompletedListener listener) 删除先前注册的握手完成侦听器。 |
abstract void |
setEnableSessionCreation(boolean flag) 控制是否可以通过此套接字建立新的SSL会话。 |
abstract void |
setEnabledCipherSuites(String[] suites) 设置启用此连接的密码套件。 |
abstract void |
setEnabledProtocols(String[] protocols) 设置启用此连接的协议版本。 |
abstract void |
setNeedClientAuth(boolean need) 配置套接字以 要求客户端身份验证。 |
void |
setSSLParameters(SSLParameters params) 将SSLParameters应用于此套接字。 |
abstract void |
setUseClientMode(boolean mode) 握手时配置套接字以使用客户端(或服务器)模式。 |
abstract void |
setWantClientAuth(boolean want) 配置套接字以 请求客户端身份验证。 |
abstract void |
startHandshake() 在此连接上启动SSL握手。 |
Inherited methods |
|
---|---|
From class java.net.Socket
|
|
From class java.lang.Object
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
SSLSocket (String host, int port)
仅用于子类。 在指定的端口上构造一个到指定主机的TCP连接。 这充当SSL客户端。
如果有安全管理器,则使用主机地址和port
作为参数调用其checkConnect
方法。 这可能会导致SecurityException。
Parameters | |
---|---|
host |
String : name of the host with which to connect, or null for the loopback address. |
port |
int : number of the server's port |
Throws | |
---|---|
IOException |
if an I/O error occurs when creating the socket |
SecurityException |
if a security manager exists and its checkConnect method doesn't allow the operation. |
UnknownHostException |
if the host is not known |
IllegalArgumentException |
if the port parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive. |
也可以看看:
SSLSocket (InetAddress address, int port)
仅用于子类。 在指定的地址和端口上构建到服务器的TCP连接。 这充当SSL客户端。
如果有安全管理器, checkConnect
主机地址和port
作为参数调用其checkConnect
方法。 这可能会导致SecurityException。
Parameters | |
---|---|
address |
InetAddress : the server's host |
port |
int : its port |
Throws | |
---|---|
IOException |
if an I/O error occurs when creating the socket |
SecurityException |
if a security manager exists and its checkConnect method doesn't allow the operation. |
IllegalArgumentException |
if the port parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive. |
NullPointerException |
if address is null. |
也可以看看:
SSLSocket (String host, int port, InetAddress clientAddress, int clientPort)
仅用于子类。 在指定的端口上构造到指定主机的SSL连接,将连接的客户端绑定给定的地址和端口。 这充当SSL客户端。
如果有安全管理器, checkConnect
主机地址和port
作为参数调用其checkConnect
方法。 这可能会导致SecurityException。
Parameters | |
---|---|
host |
String : name of the host with which to connect, or null for the loopback address. |
port |
int : number of the server's port |
clientAddress |
InetAddress : the client's address the socket is bound to, or null for the anyLocal address. |
clientPort |
int : the client's port the socket is bound to, or zero for a system selected free port. |
Throws | |
---|---|
IOException |
if an I/O error occurs when creating the socket |
SecurityException |
if a security manager exists and its checkConnect method doesn't allow the operation. |
UnknownHostException |
if the host is not known |
IllegalArgumentException |
if the port parameter or clientPort parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive. |
也可以看看:
SSLSocket (InetAddress address, int port, InetAddress clientAddress, int clientPort)
仅用于子类。 在指定的地址和TCP端口上构建到服务器的SSL连接,将连接的客户端绑定给定的地址和端口。 这充当SSL客户端。
如果有安全管理器,则使用主机地址和port
作为其参数调用其checkConnect
方法。 这可能会导致SecurityException。
Parameters | |
---|---|
address |
InetAddress : the server's host |
port |
int : its port |
clientAddress |
InetAddress : the client's address the socket is bound to, or null for the anyLocal address. |
clientPort |
int : the client's port the socket is bound to, or zero for a system selected free port. |
Throws | |
---|---|
IOException |
if an I/O error occurs when creating the socket |
SecurityException |
if a security manager exists and its checkConnect method doesn't allow the operation. |
IllegalArgumentException |
if the port parameter or clientPort parameter is outside the specified range of valid port values, which is between 0 and 65535, inclusive. |
NullPointerException |
if address is null. |
也可以看看:
void addHandshakeCompletedListener (HandshakeCompletedListener listener)
注册一个事件侦听器以接收SSL握手在此连接上完成的通知。
Parameters | |
---|---|
listener |
HandshakeCompletedListener : the HandShake Completed event listener |
Throws | |
---|---|
IllegalArgumentException |
if the argument is null. |
boolean getEnableSessionCreation ()
如果此套接字可能建立新的SSL会话,则返回true。
Returns | |
---|---|
boolean |
true indicates that sessions may be created; this is the default. false indicates that an existing session must be resumed |
String[] getEnabledCipherSuites ()
返回当前启用以用于此连接的SSL密码套件的名称。 首次创建SSLSocket时,所有启用的密码套件都支持最低的服务质量。 因此,在某些环境中,这个值可能是空的。
即使套件已启用,它也可能永远不会被使用。 (例如,对等方不支持它,套件的必需证书(和私钥)不可用,或启用匿名套件但需要验证。
Returns | |
---|---|
String[] |
an array of cipher suite names |
String[] getEnabledProtocols ()
返回当前在此连接上启用的协议版本的名称。
Returns | |
---|---|
String[] |
an array of protocols |
SSLSession getHandshakeSession ()
返回在SSL / TLS握手期间构造的 SSLSession
。
TLS协议可能会协商使用此类的实例时所需的参数,但在SSLSession
已完全初始化并通过getSession
可用之前,这些SSLSession
getSession
。 例如,有效签名算法列表可能会限制TrustManager决策期间可以使用的证书的类型,或者可以调整最大TLS分段大小的大小以更好地支持网络环境。
这种方法提供了对正在构建的SSLSession
早期访问。 根据握手的进展程度,有些数据可能尚未可用。 例如,如果远程服务器将发送一个证书链,但链尚未没有被处理,则getPeerCertificates
的方法SSLSession
将抛出SSLPeerUnverifiedException。 一旦该链已经被处理, getPeerCertificates
将返回适当的值。
与 getSession()
不同,此方法不会启动初始握手,并且在握手完成之前不会阻塞。
Returns | |
---|---|
SSLSession |
null if this instance is not currently handshaking, or if the current handshake has not progressed far enough to create a basic SSLSession. Otherwise, this method returns the SSLSession currently being negotiated. |
Throws | |
---|---|
UnsupportedOperationException |
if the underlying provider does not implement the operation. |
boolean getNeedClientAuth ()
如果套接字需要客户端身份验证,则返回true。 该选项仅适用于服务器模式下的套接字。
Returns | |
---|---|
boolean |
true if client authentication is required, or false if no client authentication is desired. |
SSLParameters getSSLParameters ()
返回对此SSLSocket有效的SSLParameters。 返回的SSLParameters的密码组和协议始终为非空值。
Returns | |
---|---|
SSLParameters |
the SSLParameters in effect for this SSLSocket. |
SSLSession getSession ()
返回此连接使用的SSL会话。 这些可以长期存在,并且经常对应于某个用户的整个登录会话。 会话指定了一个特定的密码套件,该套件正被该会话中的所有连接以及会话客户端和服务器的身份标识所使用。
此方法将在必要时启动初始握手,然后阻塞,直到握手建立。
如果在初始握手过程中发生错误,则此方法返回一个无效的会话对象,报告“SSL_NULL_WITH_NULL_NULL”的无效密码套件。
Returns | |
---|---|
SSLSession |
the SSLSession |
String[] getSupportedCipherSuites ()
返回可用于此连接的密码套件的名称。 通常,默认情况下,只有这些列表中的一部分会实际启用,因为此列表可能包含不符合服务质量要求的密码套件。 这种密码套件在专门的应用程序中可能很有用。
Returns | |
---|---|
String[] |
an array of cipher suite names |
String[] getSupportedProtocols ()
返回可用于SSL连接的协议的名称。
Returns | |
---|---|
String[] |
an array of protocols supported |
boolean getUseClientMode ()
如果套接字在握手时被设置为使用客户端模式,则返回true。
Returns | |
---|---|
boolean |
true if the socket should do handshaking in "client" mode |
也可以看看:
boolean getWantClientAuth ()
如果套接字将请求客户机认证,则返回true。 此选项仅适用于服务器模式下的套接字。
Returns | |
---|---|
boolean |
true if client authentication is requested, or false if no client authentication is desired. |
void removeHandshakeCompletedListener (HandshakeCompletedListener listener)
删除先前注册的握手完成侦听器。
Parameters | |
---|---|
listener |
HandshakeCompletedListener : the HandShake Completed event listener |
Throws | |
---|---|
IllegalArgumentException |
if the listener is not registered, or the argument is null. |
void setEnableSessionCreation (boolean flag)
控制是否可以通过此套接字建立新的SSL会话。 如果会话创建不被允许,并且没有现有的会话可以恢复,那么将不会有成功的握手。
Parameters | |
---|---|
flag |
boolean : true indicates that sessions may be created; this is the default. false indicates that an existing session must be resumed |
也可以看看:
void setEnabledCipherSuites (String[] suites)
设置启用此连接的密码套件。
suites
参数中的每个密码套件必须已由getSupportedCipherSuites()列出,否则该方法将失败。 成功调用此方法后,仅启用suites
参数中列出的suites
才能使用。
请参阅 getEnabledCipherSuites()
以获取有关为什么特定密码套件可能永远不会用于连接的更多信息。
Parameters | |
---|---|
suites |
String : Names of all the cipher suites to enable |
Throws | |
---|---|
IllegalArgumentException |
when one or more of the ciphers named by the parameter is not supported, or when the parameter is null. |
void setEnabledProtocols (String[] protocols)
设置启用此连接的协议版本。
该协议必须已被getSupportedProtocols()
列为受支持。 成功调用此方法后,只有protocols
参数中列出的协议才能使用。
Parameters | |
---|---|
protocols |
String : Names of all the protocols to enable. |
Throws | |
---|---|
IllegalArgumentException |
when one or more of the protocols named by the parameter is not supported or when the protocols parameter is null. |
也可以看看:
void setNeedClientAuth (boolean need)
配置套接字以要求客户端身份验证。 此选项仅适用于服务器模式下的套接字。
套接字的客户端身份验证设置是以下之一:
与 setWantClientAuth(boolean)
不同,如果设置此选项并且客户端选择不提供有关自身的身份验证信息, 则协商将停止并且连接将被丢弃 。
调用此方法将覆盖此方法或 setWantClientAuth(boolean)
所做的任何以前的设置。
Parameters | |
---|---|
need |
boolean : set to true if client authentication is required, or false if no client authentication is desired. |
void setSSLParameters (SSLParameters params)
将SSLParameters应用于此套接字。
意即:
params.getCipherSuites()
is non-null, setEnabledCipherSuites()
is called with that value params.getProtocols()
is non-null, setEnabledProtocols()
is called with that value params.getNeedClientAuth()
or params.getWantClientAuth()
return true
, setNeedClientAuth(true)
and setWantClientAuth(true)
are called, respectively; otherwise setWantClientAuth(false)
is called. Parameters | |
---|---|
params |
SSLParameters : the parameters |
Throws | |
---|---|
IllegalArgumentException |
if the setEnabledCipherSuites() or the setEnabledProtocols() call fails |
void setUseClientMode (boolean mode)
握手时配置套接字以使用客户端(或服务器)模式。
必须在发生任何握手之前调用此方法。 一旦握手开始,该模式不能在该套接字的生命周期中重置。
服务器通常会对自己进行身份验证,并且客户端不需要这样做。
Parameters | |
---|---|
mode |
boolean : true if the socket should start its handshaking in "client" mode |
Throws | |
---|---|
IllegalArgumentException |
if a mode change is attempted after the initial handshake has begun. |
也可以看看:
void setWantClientAuth (boolean want)
配置套接字以请求客户端身份验证。 此选项仅适用于服务器模式下的套接字。
套接字的客户端身份验证设置是以下之一:
与 setNeedClientAuth(boolean)
不同,如果设置此选项并且客户端选择不提供有关其自身的身份验证信息, 则谈判将继续 。
调用此方法将覆盖此方法或 setNeedClientAuth(boolean)
所做的任何以前的设置。
Parameters | |
---|---|
want |
boolean : set to true if client authentication is requested, or false if no client authentication is desired. |
void startHandshake ()
在此连接上启动SSL握手。 常见原因包括需要使用新的加密密钥,更改密码套件或启动新会话。 要强制完成重新认证,在开始握手之前,当前会话可能失效。
如果数据已经在连接上发送,则在握手期间它将继续流动。 当握手完成时,这将通过事件发出信号。 此方法对于连接中的初始握手是同步的,并在协商握手完成时返回。 某些协议可能不支持在现有套接字上进行多次握手,并可能抛出IOException。
Throws | |
---|---|
IOException |
on a network level error |