javax.naming.ldap

接口
异常
java.lang.Object
  继承者 javax.naming.ldap.StartTlsResponse
所有已实现的接口:
Serializable, ExtendedResponse

public abstract class StartTlsResponse
     
extends Object
implements ExtendedResponse

此类实现在 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;
 

从以下版本开始:
1.4
另请参见:
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
 

字段详细信息

OID

public static final String OID
StartTLS 扩展响应的分配对象标识符为 1.3.6.1.4.1.1466.20037。

另请参见:
常量字段值
构造方法详细信息

StartTlsResponse

protected StartTlsResponse()
构造 StartTLS 扩展响应。具体子类必须具有不带参数的公共构造方法。

方法详细信息

getID

public String getID()
检索 StartTLS 响应的对象标识符字符串。

指定者:
接口 ExtendedResponse 中的 getID
返回:
对象标识符字符串 "1.3.6.1.4.1.1466.20037"。

getEncodedValue

public byte[] getEncodedValue()
检索 StartTLS 响应的 ASN.1 BER 编码值。因为响应没有定义任何值,所以始终返回 null。

指定者:
接口 ExtendedResponse 中的 getEncodedValue
返回:
null 值。

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String[] suites)
重写在 TLS 连接上启用的密码套件的默认列表。密码套件必须已经作为受支持的项由 SSLSocketFactory.getSupportedCipherSuites() 列出。即使已经启用套件,它仍然有可能不可用,因为有可能同位体不支持它,或者必需的证书(或私钥)不可用。

参数:
suites - 要启用的所有密码套件的非 null 名称列表。
另请参见:
negotiate()

setHostnameVerifier

public abstract void setHostnameVerifier(HostnameVerifier verifier)
设置在已完成 TLS 握手且默认主机名校验失败后供 negotiate() 使用的主机名校验器。 setHostnameVerifier() 必须在调用 negotiate() 前调用才能生效。如果在 negotiate() 之后调用,则此方法不执行任何操作。

参数:
verifier - 非 null 主机名校验器回调。
另请参见:
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 套接字工厂(可能为 null)。如果为 null,则使用默认的 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 错误