투케이2K

911. (Android/Java) [간단 소스] TrustManagerFactory 간단 설명 및 사용 옵션 정리 - SSL , TLS 연결 인증서 관리 본문

Android

911. (Android/Java) [간단 소스] TrustManagerFactory 간단 설명 및 사용 옵션 정리 - SSL , TLS 연결 인증서 관리

투케이2K 2024. 12. 4. 20:03

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java / Kotlin


- 개발 툴 : AndroidStudio


- 기술 구분 : TrustManagerFactory / SSL , TLS 연결 인증서 관리

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[설명 정리]
// --------------------------------------------------------------------------------------

1. TrustManagerFactory 은 Android Api 1 에서 추가 되었으며, keyStore 에 저장 된 X509Certificate 인증서를 
   SSL , TLS 연결 시 신뢰할 수 있게 설정해주는 객체입니다


2. TrustManagerFactory 에 포함 된 주요 함수 : 

  >> getAlgorithm() : 알고리즘 이름을 반환합니다
  >> getDefaultAlgorithm() : 기본 TrustManagerFactory 알고리즘 이름을 가져옵니다
  >> getInstance() : TrustManagerFactory 팩토리 역할을 하는 객체를 반환합니다
  >> getProvider() : TrustManagerFactory 객체의 제공자를 반환합니다
  >> getTrustManagers() : TrustManagers 를 반환합니다
  >> init(KeyStore ks) : 인증 기관 및 관련 신뢰 자료로 팩토리를 초기화합니다


3. TrustManagerFactory 사용 예시 소스 코드 : 

  // ---------------------------------------------------
  // TODO [Certificate Type] : 인증서 타입 지정
  // ---------------------------------------------------
  CertificateFactory cf = CertificateFactory.getInstance("X.509");


  // ---------------------------------------------------
  // TODO [Load CA certificate] : CA 인증서 지정 : CA_FILE 은 InputStream
  // ---------------------------------------------------
  X509Certificate caCert = (X509Certificate) cf.generateCertificate(CA_FILE);


  // ---------------------------------------------------
  // TODO [Load client certificate] : 클라이언트 CRT 인증서 지정 (클레임 인증서)
  // ---------------------------------------------------
  X509Certificate clientCert = (X509Certificate) cf.generateCertificate(CRT_FILE);


  // ---------------------------------------------------
  // TODO [Load client private key] : 클라이언트 private key 키 파일 지정
  // ---------------------------------------------------
  PrivateKey privateKey = C_App.loadPrivateKey(PRIVATE_KET_FILE);


  // ---------------------------------------------------
  // TODO [Create a KeyStore for the client certificate and private key]
  // ---------------------------------------------------
  // TODO [클라이언트 인증서와 키파일을 키스토어에 저장 수행] : [Aws 의 경우 KeyStore 에 저장 된 형식이 BKS 필요]
  // ---------------------------------------------------
  KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
  keyStore.load(null, null);
  keyStore.setCertificateEntry("ca-cert", caCert);
  keyStore.setKeyEntry("client-key", privateKey, "password".toCharArray(), new Certificate[]{clientCert});


  // ---------------------------------------------------
  // TODO [Create a TrustManager that trusts the CA in our KeyStore]
  // ---------------------------------------------------
  // TODO [KeyStore 에서 CA 를 신뢰하는 TrustManager 를 만듭니다]
  // ---------------------------------------------------
  TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
  tmf.init(keyStore);

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

https://developer.android.com/reference/javax/net/ssl/TrustManagerFactory

// --------------------------------------------------------------------------------------

 

반응형
Comments