[swift] Alamofire를 사용하여 SSL Pinning 설정하기

앱의 네트워크 통신에서 보안을 강화하기 위해 SSL Pinning을 사용하는 것은 중요합니다. Alamofire는 널리 사용되는 Swift 기반의 HTTP 통신 라이브러리로, SSL Pinning 설정을 쉽게 구현할 수 있습니다. 이번 글에서는 Alamofire를 사용하여 SSL Pinning을 설정하는 방법에 대해 알아보겠습니다.

1. SSL 인증서 구성

먼저 SSL Pinning을 설정하기 위해 앱에 사용할 인증서를 구성해야 합니다. 이를 위해 인증서 파일을 프로젝트에 추가해야 합니다. .cer 또는 .crt 확장자를 가진 서버 인증서 파일을 사용합니다.

1) 프로젝트 내에 ‘Certificates’라는 폴더를 추가합니다. 2) 해당 폴더에 인증서 파일을 추가합니다.

2. Alamofire 추가 및 설정

Alamofire를 사용하기 위해 먼저 CocoaPods를 통해 Alamofire를 프로젝트에 추가해야 합니다. Podfile에 다음과 같이 추가하고 터미널에서 pod install 명령을 실행합니다.

pod 'Alamofire', '~> 5.0'

설치가 완료되면, Alamofire를 사용하기 위해 import 문을 추가합니다.

import Alamofire

3. SSL Pinning 구현

SSL Pinning을 적용하기 위해 URLSessionDelegate를 사용합니다. 이를 위해 session(configuration: URLSessionConfiguration, delegate: URLSessionDelegate, delegateQueue: OperationQueue?) 메서드를 사용합니다.

let serverTrustPolicies: [String: ServerTrustEvaluating] = [
    "your-server-domain.com": PinnedCertificatesTrustEvaluator(certificates: [.cerName]),
    // 다른 도메인에 대한 정책 추가
]

let sessionManager = Session(configuration: .default,
                             serverTrustManager: ServerTrustManager(evaluators: serverTrustPolicies))

여기서 your-server-domain.com은 서버 도메인으로 대체해야 합니다. .cerName은 앞서 프로젝트에 추가한 인증서 파일의 이름으로 변경해야 합니다.

4. 네트워크 요청 보내기

이제 SSL Pinning이 설정된 sessionManager를 사용하여 네트워크 요청을 보낼 수 있습니다. Alamofire를 사용하여 요청을 보내는 방법은 일반적인 방법과 동일합니다.

sessionManager.request("https://your-server-domain.com/api/endpoint", method: .get)
    .validate()
    .responseData { response in
        switch response.result {
        case .success(let data):
            // 성공처리
        case .failure(let error):
            // 에러처리
        }
    }

앞서 설정한 SSL Pinning 설정을 통해 Alamofire는 요청을 보낼 때 인증서를 검증하고, 검증이 성공하면 요청을 보내게 됩니다.

결론

이렇게 Swift의 Alamofire를 사용하여 SSL Pinning을 구현하는 방법에 대해 알아보았습니다. SSL Pinning은 앱의 네트워크 보안을 강화하는 중요한 요소이므로, 암호화된 통신에 사용되는 인증서를 신뢰할 수 있는지 확인하는 것이 중요합니다.