Skip to content

인증서 피닝(Certificate Pinning) 구현 #8

Description

@unstabler

📋 개요

API 통신 보안 강화를 위해 FZAPIClient에 인증서 피닝을 구현합니다.

🎯 목적

  • 중간자 공격(MITM) 방지
  • API 통신 보안 강화
  • 사용자 데이터 보호

📝 구현 방안

1. Alamofire ServerTrustManager 활용

// ServerTrustManager 설정 예시
let evaluators: [String: ServerTrustEvaluating] = [
    "api.flitz.app": PinnedCertificatesTrustEvaluator()
]
let serverTrustManager = ServerTrustManager(evaluators: evaluators)

2. 피닝 방식 선택

  • PublicKeyPinning: 공개 키만 검증 (인증서 갱신 시 유연함) ✅ 권장
  • CertificatePinning: 전체 인증서 검증 (더 엄격하지만 갱신 시 앱 업데이트 필요)

3. FZAPIClient 수정 사항

  • Session 인스턴스를 클래스 프로퍼티로 추가
  • 기본 AF 대신 커스텀 세션 사용
  • 개발/프로덕션 환경 분기 처리

🔧 구현 단계

  1. 인증서 준비

    • 서버 인증서 파일(.cer) 획득
    • 프로젝트에 인증서 파일 추가
  2. 코드 구현

    • ServerTrustManager 설정
    • FZAPIClient에 커스텀 Session 적용
    • 환경별 분기 처리 (개발/스테이징/프로덕션)
  3. 테스트

    • 정상 인증서 검증 테스트
    • 잘못된 인증서 거부 테스트
    • 인증서 만료 시나리오 테스트

⚠️ 주의사항

  • 인증서 갱신 주기 관리 필요
  • 개발 환경에서는 피닝 비활성화 옵션 필요
  • 피닝 실패 시 fallback 전략 수립
  • 인증서 파일은 앱 번들에 포함되므로 보안 관리 필요

🔗 참고 자료

📌 라벨

  • security
  • enhancement
  • networking

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions