Most visited

Recently visited

Added in API level 1

SSLSocket

public abstract class SSLSocket
extends Socket

java.lang.Object
   ↳ java.net.Socket
     ↳ javax.net.ssl.SSLSocket


该类扩展了 Socket并使用诸如“安全套接字层”(SSL)或IETF“传输层安全性”(TLS)协议等协议提供安全套接字。

这样的套接字是普通的流套接字,但是它们为基础网络传输协议(如TCP)增加了一层安全保护。 这些保护措施包括:

这些保护由“密码套件”指定,密码套件是给定SSL连接使用的加密算法的组合。 在谈判过程中,两个端点必须同意在两种环境中都可用的密码套件。 如果不存在这样的套件,则不能建立SSL连接,也不能交换数据。

所使用的密码套件由称为“握手”的协商过程建立。 此过程的目标是创建或重新加入“会话”,这可以保护许多连接随着时间的推移。 握手完成后,您可以使用getSession方法访问会话属性。 这种连接的初始握手可以通过以下三种方式之一启动:

如果由于任何原因握手失败,则 SSLSocket已关闭,无法进行任何进一步通信。

有两组密码套件,您在管理密码套件时需要了解这些套件:

实施默认要求默认情况下只启用对服务器进行身份验证并提供机密性的密码套件。 只有双方明确同意未经身份验证和/或非私人(未加密)的通信,才会选择这样的密码套件。

当首次创建 SSLSocket ,不会执行握手,以便应用程序可以首先设置其通信首选项:要使用哪些密码套件,套接字是否应处于客户端或服务器模式等。但是,安全始终由应用程序数据通过连接发送。

您可以注册接收握手完成的事件通知。 这涉及使用两个额外的类。 HandshakeCompletedEvent对象被传递给HandshakeCompletedListener实例,由该API的用户注册。 SSLSocketSSLSocketFactory创建,或由acceptSSLSocketFactory创建连接SSLServerSocket

SSL套接字必须选择在客户端或服务器模式下运行。 这将决定谁开始握手过程,以及每方应发送哪些消息。 每个连接必须有一个客户端和一个服务器,否则握手无法正常进行。 一旦初始握手开始,套接字无法在客户端和服务器模式之间切换,即使在执行重新协商时也是如此。

Default configuration for different Android versions

SSLSocket从默认获得实例 SSLSocketFactorySSLServerSocketFactory ,和 SSLContext配置如下:

Protocols

客户套接字:

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+

Cipher suites

与密码套件名称进行操作的方法(例如, getSupportedCipherSuitessetEnabledCipherSuites ),因为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

也可以看看:

Summary

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握手期间构造的 SSLSession

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

Protected constructors

SSLSocket

Added in API level 1
SSLSocket ()

仅用于子类。 构造一个未初始化的,未连接的TCP套接字。

SSLSocket

Added in API level 1
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

Added in API level 1
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

Added in API level 1
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

Added in API level 1
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.

也可以看看:

Public methods

addHandshakeCompletedListener

Added in API level 1
void addHandshakeCompletedListener (HandshakeCompletedListener listener)

注册一个事件侦听器以接收SSL握手在此连接上完成的通知。

Parameters
listener HandshakeCompletedListener: the HandShake Completed event listener
Throws
IllegalArgumentException if the argument is null.

也可以看看:

getEnableSessionCreation

Added in API level 1
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

也可以看看:

getEnabledCipherSuites

Added in API level 1
String[] getEnabledCipherSuites ()

返回当前启用以用于此连接的SSL密码套件的名称。 首次创建SSLSocket时,所有启用的密码套件都支持最低的服务质量。 因此,在某些环境中,这个值可能是空的。

即使套件已启用,它也可能永远不会被使用。 (例如,对等方不支持它,套件的必需证书(和私钥)不可用,或启用匿名套件但需要验证。

Returns
String[] an array of cipher suite names

也可以看看:

getEnabledProtocols

Added in API level 1
String[] getEnabledProtocols ()

返回当前在此连接上启用的协议版本的名称。

Returns
String[] an array of protocols

也可以看看:

getHandshakeSession

Added in API level 24
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.

也可以看看:

getNeedClientAuth

Added in API level 1
boolean getNeedClientAuth ()

如果套接字需要客户端身份验证,则返回true。 该选项仅适用于服务器模式下的套接字。

Returns
boolean true if client authentication is required, or false if no client authentication is desired.

也可以看看:

getSSLParameters

Added in API level 9
SSLParameters getSSLParameters ()

返回对此SSLSocket有效的SSLParameters。 返回的SSLParameters的密码组和协议始终为非空值。

Returns
SSLParameters the SSLParameters in effect for this SSLSocket.

getSession

Added in API level 1
SSLSession getSession ()

返回此连接使用的SSL会话。 这些可以长期存在,并且经常对应于某个用户的整个登录会话。 会话指定了一个特定的密码套件,该套件正被该会话中的所有连接以及会话客户端和服务器的身份标识所使用。

此方法将在必要时启动初始握手,然后阻塞,直到握手建立。

如果在初始握手过程中发生错误,则此方法返回一个无效的会话对象,报告“SSL_NULL_WITH_NULL_NULL”的无效密码套件。

Returns
SSLSession the SSLSession

getSupportedCipherSuites

Added in API level 1
String[] getSupportedCipherSuites ()

返回可用于此连接的密码套件的名称。 通常,默认情况下,只有这些列表中的一部分会实际启用,因为此列表可能包含不符合服务质量要求的密码套件。 这种密码套件在专门的应用程序中可能很有用。

Returns
String[] an array of cipher suite names

也可以看看:

getSupportedProtocols

Added in API level 1
String[] getSupportedProtocols ()

返回可用于SSL连接的协议的名称。

Returns
String[] an array of protocols supported

getUseClientMode

Added in API level 1
boolean getUseClientMode ()

如果套接字在握手时被设置为使用客户端模式,则返回true。

Returns
boolean true if the socket should do handshaking in "client" mode

也可以看看:

getWantClientAuth

Added in API level 1
boolean getWantClientAuth ()

如果套接字将请求客户机认证,则返回true。 此选项仅适用于服务器模式下的套接字。

Returns
boolean true if client authentication is requested, or false if no client authentication is desired.

也可以看看:

removeHandshakeCompletedListener

Added in API level 1
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.

也可以看看:

setEnableSessionCreation

Added in API level 1
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

也可以看看:

setEnabledCipherSuites

Added in API level 1
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.

也可以看看:

setEnabledProtocols

Added in API level 1
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.

也可以看看:

setNeedClientAuth

Added in API level 1
void setNeedClientAuth (boolean need)

配置套接字以要求客户端身份验证。 此选项仅适用于服务器模式下的套接字。

套接字的客户端身份验证设置是以下之一:

  • client authentication required
  • client authentication requested
  • no client authentication desired

setWantClientAuth(boolean)不同,如果设置此选项并且客户端选择不提供有关自身的身份验证信息, 则协商将停止并且连接将被丢弃

调用此方法将覆盖此方法或 setWantClientAuth(boolean)所做的任何以前的设置。

Parameters
need boolean: set to true if client authentication is required, or false if no client authentication is desired.

也可以看看:

setSSLParameters

Added in API level 9
void setSSLParameters (SSLParameters params)

将SSLParameters应用于此套接字。

意即:

  • if params.getCipherSuites() is non-null, setEnabledCipherSuites() is called with that value
  • if params.getProtocols() is non-null, setEnabledProtocols() is called with that value
  • if 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

setUseClientMode

Added in API level 1
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.

也可以看看:

setWantClientAuth

Added in API level 1
void setWantClientAuth (boolean want)

配置套接字以请求客户端身份验证。 此选项仅适用于服务器模式下的套接字。

套接字的客户端身份验证设置是以下之一:

  • client authentication required
  • client authentication requested
  • no client authentication desired

setNeedClientAuth(boolean)不同,如果设置此选项并且客户端选择不提供有关其自身的身份验证信息, 则谈判将继续

调用此方法将覆盖此方法或 setNeedClientAuth(boolean)所做的任何以前的设置。

Parameters
want boolean: set to true if client authentication is requested, or false if no client authentication is desired.

也可以看看:

startHandshake

Added in API level 1
void startHandshake ()

在此连接上启动SSL握手。 常见原因包括需要使用新的加密密钥,更改密码套件或启动新会话。 要强制完成重新认证,在开始握手之前,当前会话可能失效。

如果数据已经在连接上发送,则在握手期间它将继续流动。 当握手完成时,这将通过事件发出信号。 此方法对于连接中的初始握手是同步的,并在协商握手完成时返回。 某些协议可能不支持在现有套接字上进行多次握手,并可能抛出IOException。

Throws
IOException on a network level error

也可以看看:

Hooray!