X509ExtendedTrustManager — 연결에 민감한 신뢰 관리를 위한 확장

X509ExtendedTrustManager — 연결에 민감한 신뢰 관리를 위한 확장

X509ExtendedTrustManager는 SSL/TLS/DTLS 연결에 민감한(sensitive) 신뢰 관리를 지원하기 위해 X509TrustManager 인터페이스를 확장한 추상 클래스예요. 중간자 공격(man-in-the-middle)을 막기 위해, 엔드 엔티티 인증서의 호스트 이름이 대상 호스트 이름과 일치하는지 호스트 이름 검사를 할 수 있어요.

출처: Java API Reference

본문

public abstract class X509ExtendedTrustManager extends Object implements X509TrustManager

TLS/DTLS 자체는 이런 검사를 요구하지 않지만, TLS/DTLS 위의 일부 프로토콜(예: HTTPS)은 요구해요. 이전 JDK 버전에서는 인증서 체인 검사가 SSL/TLS/DTLS 계층에서, 호스트 이름 검증 검사는 TLS/DTLS 위의 계층에서 수행됐어요. 이 클래스는 두 검사를 이 클래스에 대한 단일 호출로 수행할 수 있게 해줘요.

RFC 2830은 "LDAPS" 알고리즘의 서버 식별 사양을 정의하고, RFC 2818은 "HTTPS" 알고리즘의 서버 식별과 클라이언트 식별 사양을 정의해요.

생성자

  • X509ExtendedTrustManager() — 하위 클래스에서 호출하기 위한 생성자예요.

메서드

  • abstract void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateException — 피어가 제공한 부분적 또는 완전한 인증서 체인이 주어졌을 때, 인증 타입과 SSL 파라미터를 기반으로 인증서 경로를 구축·검증해요. authType은 실제 사용된 인증서에 의해 결정돼요 (예: RSAPublicKey를 쓰면 "RSA"여야 해요). 검사는 대소문자를 구분해요. socketSSLSocket의 인스턴스이고 SSLParameters의 엔드포인트 식별 알고리즘이 비어 있지 않다면, 중간자 공격을 막기 위해 소켓이 연결된 주소를 엔드 엔티티 X.509 인증서에 제시된 피어 정체와 대조해요. 인증서 체인이 이 TrustManager가 신뢰하지 않으면 CertificateException을 던져요.
  • abstract void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) throws CertificateExceptionauthType은 암호 스위트의 키 교환 알고리즘 부분을 문자열로 나타낸 것이에요 (예: "RSA", "DHE_DSS"). 일부 수출용(exportable) 암호 스위트는 핸드셰이킹 중 런타임에 키 교환 알고리즘이 결정돼요. 나머지 동작은 checkClientTrusted와 유사해요.
  • abstract void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException — 소켓 대신 SSLEngine 기준으로 동작하는 오버로드예요.
  • abstract void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) throws CertificateException — 서버 쪽 검증을 SSLEngine 기준으로 수행하는 오버로드예요.

왜 중요한가요?

기본 X509TrustManager는 소켓만 다뤘지만, X509ExtendedTrustManagerSSLSocketSSLEngine 양쪽에서 엔드포인트 식별(호스트 이름 검증)과 알고리즘 제약까지 한 번에 검사하도록 설계돼요. 그래서 HTTPS 같은 안전한 통신에서 더 정확한 신뢰 검증을 제공해요.

관련 클래스로는 X509TrustManagerHostnameVerifier가 있어요.

더 알아보기 (Learn more)