java.lang.Object javax.naming.ldap.StartTlsResponse
public abstract class StartTlsResponse
此类实现在 Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security 中定义的 StartTLS 的 LDAPv3 扩展响应。 StartTLS 的对象标识符为 1.3.6.1.4.1.1466.20037,没有定义任何扩展响应值。
使用 Start TLS 扩展请求和响应在与 JNDI 上下文(对该上下文调用 extendedOperation())关联的现有 LDAP 连接上建立 TLS 连接。通常,JNDI 程序使用以下 Start TLS 扩展请求和响应类。
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;
StartTlsRequest
,
序列化表格
字段摘要 | |
---|---|
static String |
OID StartTLS 扩展响应的分配对象标识符为 1.3.6.1.4.1.1466.20037。 |
构造方法摘要 | |
---|---|
protected |
StartTlsResponse() 构造 StartTLS 扩展响应。 |
方法摘要 | |
---|---|
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() 使用的主机名校验器。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public static final String OID
构造方法详细信息 |
---|
protected StartTlsResponse()
方法详细信息 |
---|
public String getID()
ExtendedResponse
中的
getID
public byte[] getEncodedValue()
ExtendedResponse
中的
getEncodedValue
public abstract void setEnabledCipherSuites(String[] suites)
suites
- 要启用的所有密码套件的非 null 名称列表。
negotiate()
public abstract void setHostnameVerifier(HostnameVerifier verifier)
verifier
- 非 null 主机名校验器回调。
negotiate()
public abstract SSLSession negotiate() throws IOException
此方法等效于 negotiate(null)。
IOException
- 如果在建立 TLS 会话时遇到 IO 错误。
setEnabledCipherSuites(java.lang.String[])
,
setHostnameVerifier(javax.net.ssl.HostnameVerifier)
public abstract SSLSession negotiate(SSLSocketFactory factory) throws IOException
使用提供的 SSL 套接字工厂创建 SSL 套接字,并将其附加到现有连接上。执行 TLS 握手并返回协商的会话信息。
如果密码套件是通过 setEnabledCipherSuites 设置的,则需要在 TLS 握手开始之前启用这些套件。
主机名校验在 TLS 握手完成之后执行。默认的主机名校验将服务器主机名与存在于服务器证书中的主机名信息进行匹配。如果此校验失败且没有通过 setHostnameVerifier 设置任何回调,则协商失败。如果此校验失败但通过 setHostnameVerifier 设置了回调,则使用回调确定协商是否成功。
如果发生错误,则关闭 SSL 套接字并抛出 IOException。底层连接保持原样。
factory
- 要使用的 SSL 套接字工厂(可能为 null)。如果为 null,则使用默认的 SSL 套接字工厂。
IOException
- 如果在建立 TLS 会话时遇到 IO 错误。
setEnabledCipherSuites(java.lang.String[])
,
setHostnameVerifier(javax.net.ssl.HostnameVerifier)
public abstract void close() throws IOException
IOException
- 如果在关闭 TLS 连接时遇到 IO 错误