Class StartTlsResponse

Class StartTlsResponse

public abstract class StartTlsResponse
extends Object
implements ExtendedResponse

이 클래스는 "Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security"에 정의된 StartTLS에 대한 LDAPv3 Extended Response를 구현해요. StartTLS의 객체 식별자는 1.3.6.1.4.1.1466.20037이고 정의된 확장 응답 값은 없어요. StartTLS 확장 요청과 응답은 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;

OID

public static final String OID

StartTLS 확장 응답의 할당된 객체 식별자는 1.3.6.1.4.1.1466.20037이에요.

  • See Also: 상수 필드 값(Constant Field Values)

StartTlsResponse

protected StartTlsResponse()

StartTLS 확장 응답을 생성해요. 구체적(concrete) 하위 클래스는 인자 없는 public 생성자를 가져야 해요.

getID

public String getID()

StartTLS 응답의 객체 식별자 문자열을 가져와요.

  • Specified by: ExtendedResponse 인터페이스의 getID
  • Returns: 객체 식별자 문자열 "1.3.6.1.4.1.1466.20037"

getEncodedValue

public byte[] getEncodedValue()

StartTLS 응답의 ASN.1 BER 인코딩 값을 가져와요. 응답에 정의된 값이 없으므로 항상 null이 반환돼요.

  • Specified by: ExtendedResponse 인터페이스의 getEncodedValue
  • Returns: null 값

setEnabledCipherSuites

public abstract void setEnabledCipherSuites(String[] suites)

TLS 연결에 사용하도록 활성화된 암호 스위트(cipher suite)의 기본 목록을 재정의해요. 암호 스위트는 SSLSocketFactory.getSupportedCipherSuites()가 지원한다고 이미 나열한 것이어야 해요. 스위트가 활성화되어 있어도 피어가 지원하지 않거나 필수 인증서(및 개인 키)가 없어서 실제로는 사용되지 않을 수 있어요.

  • Parameters: suites - 활성화할 모든 암호 스위트의 이름의, null이 아닌 목록
  • See Also: negotiate()

setHostnameVerifier

public abstract void setHostnameVerifier(HostnameVerifier verifier)

TLS 핸드셰이크가 완료되고 기본 호스트 이름 검증이 실패한 후에 negotiate()가 사용하는 호스트 이름 검증기(hostname verifier)를 설정해요. 효과를 보려면 setHostnameVerifier()negotiate()를 호출하기 전에 호출되어야 해요. negotiate() 후에 호출되면 이 메서드는 아무것도 하지 않아요.

  • Parameters: verifier - null이 아닌 호스트 이름 검증 콜백
  • See Also: negotiate()

negotiate

public abstract SSLSession negotiate()
                              throws IOException

기본 SSL 소켓 팩토리를 사용해 TLS 세션을 협상해요. 이 메서드는 negotiate(null)과 동등해요.

  • Returns: 협상된 SSL 세션
  • Throws: IOException - TLS 세션을 수립하는 동안 IO 오류가 발생했을 때
  • See Also: 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로 콜백이 설정되지 않았으면 협상이 실패해요. 이 검증이 실패하고 콜백이 설정되어 있으면 콜백을 사용해 협상 성공 여부를 결정해요. 오류가 발생하면 SSL 소켓이 닫히고 IOException이 던져져요. 기반 연결은 그대로 유지돼요.

  • Parameters: factory - 사용할, null일 수 있는 SSL 소켓 팩토리. null이면 기본 SSL 소켓 팩토리가 사용돼요
  • Returns: 협상된 SSL 세션
  • Throws: IOException - TLS 세션을 수립하는 동안 IO 오류가 발생했을 때
  • See Also: setEnabledCipherSuites(java.lang.String[]), setHostnameVerifier(javax.net.ssl.HostnameVerifier)

close

public abstract void close()
                    throws IOException

TLS 연결을 정상적으로 닫고 기반 연결로 되돌려요.

  • Throws: IOException - TLS 연결을 닫는 동안 IO 오류가 발생했을 때