Module  java.naming
软件包  javax.naming.ldap

Class StartTlsResponse

  • All Implemented Interfaces:
    SerializableExtendedResponse


    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
    另请参见:
    StartTlsRequestSerialized Form
    • 字段详细信息

      • OID

        public static final String OID
        StartTLS扩展响应的分配对象标识符为1.3.6.1.4.1.1466.20037。
        另请参见:
        Constant Field Values
    • 构造方法详细信息

      • StartTlsResponse

        protected StartTlsResponse​()
        构建一个StartTLS扩展响应。 一个具体的子类必须有一个public no-arg构造函数。
    • 方法详细信息

      • 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​(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错误