Module java.naming

Class StartTlsResponse

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

public abstract class StartTlsResponse extends Object implements 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

    Fields
    Modifier and Type
    Field
    Description
    static final String
    OID
    StartTLS 扩展响应的分配对象标识符是1.3.6.1.4.1.1466.20037。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    构造一个StartTLS 扩展响应。
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract void
    close()
    优雅地关闭TLS连接,并恢复到基础连接。
    byte[]
    检索StartTLS 响应的ASN.1 BER编码值。
    getID()
    检索StartTLS 响应的对象标识符字符串。
    abstract SSLSession
    使用默认的SSL套接字工厂协商TLS会话。
    abstract SSLSession
    使用SSL套接字工厂协商TLS会话。
    abstract void
    覆盖用于TLS连接的启用的密码套件的默认列表。
    abstract void
    在TLS握手完成并默认主机名验证失败后,设置negotiate()使用的主机名验证器。如果在调用negotiate()之前调用了setHostnameVerifier(),则会生效。如果在调用negotiate()之后调用,此方法不会执行任何操作。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • OID

      public static final String OID
      StartTLS 扩展响应的分配对象标识符是1.3.6.1.4.1.1466.20037。
      参见:
  • Constructor Details

    • StartTlsResponse

      protected StartTlsResponse()
      构造一个StartTLS 扩展响应。具体的子类必须有一个公共无参构造函数。
  • Method Details

    • getID

      public String 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

      public abstract void setEnabledCipherSuites(String[] suites)
      覆盖用于TLS连接的启用的密码套件的默认列表。密码套件必须已经在SSLSocketFactory.getSupportedCipherSuites()中列出为受支持。即使启用了密码套件,也可能不会使用它,因为对等方不支持它,或者因为必需的证书(和私钥)不可用。
      参数:
      suites - 要启用的所有密码套件的非null名称列表。
      参见:
    • setHostnameVerifier

      public abstract void setHostnameVerifier(HostnameVerifier verifier)
      在TLS握手完成并默认主机名验证失败后,设置negotiate()使用的主机名验证器。必须在调用negotiate()之前调用setHostnameVerifier()才能生效。如果在调用negotiate()之后调用,此方法不会执行任何操作。
      参数:
      verifier - 非null的主机名验证器回调。
      参见:
    • negotiate

      public abstract SSLSession negotiate() throws IOException
      使用默认的SSL套接字工厂协商TLS会话。

      此方法等效于negotiate(null)

      返回:
      协商的SSL会话
      抛出:
      IOException - 如果在建立TLS会话时遇到IO错误。
      参见:
    • negotiate

      public abstract SSLSession negotiate(SSLSocketFactory factory) throws IOException
      使用SSL套接字工厂协商TLS会话。

      使用提供的SSL套接字工厂创建SSL套接字,并将其附加到现有连接。执行TLS握手并返回协商的会话信息。

      如果通过setEnabledCipherSuites设置了密码套件,则在TLS握手开始之前启用它们。

      在TLS握手完成后执行主机名验证。默认的主机名验证会将服务器的主机名与服务器证书中找到的主机名信息进行匹配。如果此验证失败且未通过setHostnameVerifier设置回调,则协商失败。如果此验证失败且通过setHostnameVerifier设置了回调,则使用回调确定协商是否成功。

      如果发生错误,则关闭SSL套接字并抛出IOException。底层连接保持不变。

      参数:
      factory - 可能为null的SSL套接字工厂。如果为null,则使用默认的SSL套接字工厂。
      返回:
      协商的SSL会话
      抛出:
      IOException - 如果在建立TLS会话时遇到IO错误。
      参见:
    • close

      public abstract void close() throws IOException
      优雅地关闭TLS连接,并恢复到基础连接。
      抛出:
      IOException - 如果在关闭TLS连接时遇到IO错误