java.lang.Object
javax.naming.ldap.StartTlsResponse
- 所有已实现的接口:
-
Serializable
,ExtendedResponse
该类实现了LDAPv3 StartTLS 的扩展响应,定义在轻量级目录访问协议(v3):传输层安全性扩展中。StartTLS 的对象标识符是1.3.6.1.4.1.1466.20037,没有定义扩展响应值。
Start TLS 扩展请求和响应用于在调用extendedOperation()
的JNDI上下文关联的现有LDAP连接上建立TLS连接。通常,JNDI程序使用StartTLS 扩展请求和响应类如下。
import javax.naming.ldap.*; // 打开LDAP连接 LdapContext ctx = new InitialLdapContext(); // 执行StartTLS 扩展操作 StartTlsResponse tls = (StartTlsResponse) ctx.extendedOperation(new StartTlsRequest()); // 打开TLS连接(在现有LDAP连接上)并获取协商的TLS会话详细信息:密码套件,对等证书,... SSLSession session = tls.negotiate(); // ... 使用ctx执行受保护的LDAP操作 // 关闭TLS连接(恢复到基础LDAP连接) tls.close(); // ... 使用ctx执行未受保护的LDAP操作 // 关闭LDAP连接 ctx.close;
- 自版本:
- 1.4
- 参见:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
close()
优雅地关闭TLS连接,并恢复到基础连接。byte[]
检索StartTLS 响应的ASN.1 BER编码值。getID()
检索StartTLS 响应的对象标识符字符串。abstract SSLSession
使用默认的SSL套接字工厂协商TLS会话。abstract SSLSession
negotiate
(SSLSocketFactory factory) 使用SSL套接字工厂协商TLS会话。abstract void
setEnabledCipherSuites
(String[] suites) 覆盖用于TLS连接的启用的密码套件的默认列表。abstract void
setHostnameVerifier
(HostnameVerifier verifier) 在TLS握手完成并默认主机名验证失败后,设置negotiate()
使用的主机名验证器。如果在调用negotiate()
之前调用了setHostnameVerifier()
,则会生效。如果在调用negotiate()
之后调用,此方法不会执行任何操作。
-
Field Details
-
OID
StartTLS 扩展响应的分配对象标识符是1.3.6.1.4.1.1466.20037。- 参见:
-
-
Constructor Details
-
StartTlsResponse
protected StartTlsResponse()构造一个StartTLS 扩展响应。具体的子类必须有一个公共无参构造函数。
-
-
Method Details
-
getID
检索StartTLS 响应的对象标识符字符串。- 指定者:
-
getID
在接口ExtendedResponse
- 返回:
- 对象标识符字符串,"1.3.6.1.4.1.1466.20037"。
-
getEncodedValue
public byte[] getEncodedValue()检索StartTLS 响应的ASN.1 BER编码值。由于响应没有定义值,因此始终返回null。- 指定者:
-
getEncodedValue
在接口ExtendedResponse
- 返回:
- null值。
-
setEnabledCipherSuites
覆盖用于TLS连接的启用的密码套件的默认列表。密码套件必须已经在SSLSocketFactory.getSupportedCipherSuites()
中列出为受支持。即使启用了密码套件,也可能不会使用它,因为对等方不支持它,或者因为必需的证书(和私钥)不可用。- 参数:
-
suites
- 要启用的所有密码套件的非null名称列表。 - 参见:
-
setHostnameVerifier
在TLS握手完成并默认主机名验证失败后,设置negotiate()
使用的主机名验证器。必须在调用negotiate()
之前调用setHostnameVerifier()
才能生效。如果在调用negotiate()
之后调用,此方法不会执行任何操作。- 参数:
-
verifier
- 非null的主机名验证器回调。 - 参见:
-
negotiate
使用默认的SSL套接字工厂协商TLS会话。此方法等效于
negotiate(null)
。- 返回:
- 协商的SSL会话
- 抛出:
-
IOException
- 如果在建立TLS会话时遇到IO错误。 - 参见:
-
negotiate
使用SSL套接字工厂协商TLS会话。使用提供的SSL套接字工厂创建SSL套接字,并将其附加到现有连接。执行TLS握手并返回协商的会话信息。
如果通过
setEnabledCipherSuites
设置了密码套件,则在TLS握手开始之前启用它们。在TLS握手完成后执行主机名验证。默认的主机名验证会将服务器的主机名与服务器证书中找到的主机名信息进行匹配。如果此验证失败且未通过
setHostnameVerifier
设置回调,则协商失败。如果此验证失败且通过setHostnameVerifier
设置了回调,则使用回调确定协商是否成功。如果发生错误,则关闭SSL套接字并抛出IOException。底层连接保持不变。
- 参数:
-
factory
- 可能为null的SSL套接字工厂。如果为null,则使用默认的SSL套接字工厂。 - 返回:
- 协商的SSL会话
- 抛出:
-
IOException
- 如果在建立TLS会话时遇到IO错误。 - 参见:
-
close
优雅地关闭TLS连接,并恢复到基础连接。- 抛出:
-
IOException
- 如果在关闭TLS连接时遇到IO错误
-