- java.lang.Object
-
- javax.naming.ldap.StartTlsResponse
-
- All Implemented Interfaces:
-
Serializable
,ExtendedResponse
public abstract class StartTlsResponse extends Object implements ExtendedResponse
此类实现了针对StartTLS的LDAPv3扩展响应,如Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security所定义。StartTLS的对象标识符为1.3.6.1.4.1.1466.20037,并且未定义扩展响应值。启动TLS扩展请求和响应用于通过与调用
extendedOperation()
的JNDI上下文相关联的现有LDAP连接建立TLS连接。 通常,JNDI程序使用StartTLS扩展请求和响应类,如下所示。import javax.naming.ldap.*; // Open an LDAP association LdapContext ctx = new InitialLdapContext(); // Perform a StartTLS extended operation StartTlsResponse tls = (StartTlsResponse) ctx.extendedOperation(new StartTlsRequest()); // Open a TLS connection (over the existing LDAP association) and get details // of the negotiated TLS session: cipher suite, peer certificate, ... SSLSession session = tls.negotiate(); // ... use ctx to perform protected LDAP operations // Close the TLS connection (revert back to the underlying LDAP association) tls.close(); // ... use ctx to perform unprotected LDAP operations // Close the LDAP association ctx.close;
- 从以下版本开始:
- 1.4
- 另请参见:
-
StartTlsRequest
, Serialized Form
-
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
StartTlsResponse()
构建一个StartTLS扩展响应。
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 abstract void
close()
妥善地关闭TLS连接并恢复到底层连接。byte[]
getEncodedValue()
检索StartTLS响应的ASN.1 BER编码值。String
getID()
检索StartTLS响应的对象标识符字符串。abstract SSLSession
negotiate()
使用默认的SSL套接字工厂协商TLS会话。abstract SSLSession
negotiate(SSLSocketFactory factory)
使用SSL套接字工厂协商TLS会话。abstract void
setEnabledCipherSuites(String[] suites)
覆盖在TLS连接上启用的密码套件的默认列表。abstract void
setHostnameVerifier(HostnameVerifier verifier)
在TLS握手完成并且默认主机名验证失败后,设置negotiate()
使用的主机名验证程序。
-
-
-
字段详细信息
-
OID
public static final String OID
StartTLS扩展响应的分配对象标识符为1.3.6.1.4.1.1466.20037。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
getID
public String getID()
检索StartTLS响应的对象标识符字符串。- Specified by:
-
getID
在接口ExtendedResponse
- 结果
- 对象标识符字符串“1.3.6.1.4.1.1466.20037”。
-
getEncodedValue
public byte[] getEncodedValue()
检索StartTLS响应的ASN.1 BER编码值。 由于响应没有定义的值,因此始终返回null。- Specified by:
-
getEncodedValue
在接口ExtendedResponse
- 结果
- 空值。
-
setEnabledCipherSuites
public abstract void setEnabledCipherSuites(String[] suites)
覆盖在TLS连接上启用的密码套件的默认列表。 密码套件必须已被SSLSocketFactory.getSupportedCipherSuites()
列为受支持。 即使启用了套件,仍然可能不会使用它,因为对等体不支持它,或者因为必需的证书(和私钥)不可用。- 参数
-
suites
- 要启用的所有密码套件的名称的非空列表。 - 另请参见:
-
negotiate()
-
setHostnameVerifier
public abstract void setHostnameVerifier(HostnameVerifier verifier)
在TLS握手完成并且默认主机名验证失败后,设置negotiate()
使用的主机名验证程序。setHostnameVerifier()
必须在调用negotiate()
之前调用才能生效。 如果在negotiate()
后negotiate()
,此方法不执行任何操作。- 参数
-
verifier
- 非空主机名验证器回调。 - 另请参见:
-
negotiate()
-
negotiate
public abstract SSLSession negotiate() throws IOException
使用默认的SSL套接字工厂协商TLS会话。此方法相当于
negotiate(null)
。- 结果
- 协商的SSL会话
- 异常
-
IOException
- 如果在建立TLS会话时遇到IO错误。 - 另请参见:
-
setEnabledCipherSuites(java.lang.String[])
,setHostnameVerifier(javax.net.ssl.HostnameVerifier)
-
negotiate
public abstract SSLSession negotiate(SSLSocketFactory factory) throws IOException
使用SSL套接字工厂协商TLS会话。使用提供的SSL套接字工厂创建SSL套接字,并将其附加到现有连接。 执行TLS握手并返回协商的会话信息。
如果通过
setEnabledCipherSuites
设置了密码套件,则在TLS握手开始之前启用它们。在TLS握手完成后执行主机名验证。 默认的主机名验证会根据服务器证书中找到的主机名信息来匹配服务器的主机名。 如果此验证失败,并且没有通过
setHostnameVerifier
设置回调,则协商失败。 如果此验证失败,并通过setHostnameVerifier
设置了回调,则回调用于确定协商成功。如果发生错误,则SSL套接字将关闭,并引发IOException。 底层连接保持不变。
- 参数
-
factory
- 要使用的可能为空的SSL套接字工厂。 如果为空,则使用默认的SSL套接字工厂。 - 结果
- 协商的SSL会话
- 异常
-
IOException
- 如果在建立TLS会话时遇到IO错误。 - 另请参见:
-
setEnabledCipherSuites(java.lang.String[])
,setHostnameVerifier(javax.net.ssl.HostnameVerifier)
-
close
public abstract void close() throws IOException
妥善地关闭TLS连接并恢复到底层连接。- 异常
-
IOException
- 如果在关闭TLS连接时遇到IO错误
-
-