[swift] Swift 앱의 SSL/TLS 인증서 구현

이 글에서는 Swift 언어로 작성된 iOS 앱에서 SSL/TLS 인증서를 구현하는 방법을 알아보겠습니다.

1. 인증서 가져오기

먼저, SSL/TLS 인증서 파일을 가져와야 합니다. 일반적으로 .cer 또는 .p12 확장자를 가진 파일이며, 인증 기관에서 발급받을 수 있습니다. 해당 인증서 파일을 프로젝트의 리소스에 추가해야 합니다.

2. URLSession 구성

SSL/TLS 인증서를 사용하기 위해 URLSession을 구성해야 합니다. URLSession은 네트워크 작업을 수행하는 객체입니다.

let url = URL(string: "https://example.com/api")!
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)
let task = session.dataTask(with: url) { (data, response, error) in
    // 네트워크 작업 완료 후 실행되는 클로저
}
task.resume()

3. URLSessionDelegate 구현

URLSessionDelegate 프로토콜을 채택하여 URLSessionDelegate 프로토콜의 메서드를 구현해야 합니다. 이를 통해 SSL/TLS 인증서의 유효성을 확인하고 인증서를 특정 도메인에 적용할 수 있습니다.

extension ViewController: URLSessionDelegate {
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge,
                    completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        guard let serverTrust = challenge.protectionSpace.serverTrust else {
            completionHandler(.cancelAuthenticationChallenge, nil)
            return
        }
        
        let credential = URLCredential(trust: serverTrust)
        completionHandler(.useCredential, credential)
    }
}

위의 코드에서는 URLSessionDelegate의 urlSession(_:didReceive:completionHandler:) 메서드를 구현하였습니다. 이 메서드에서는 서버로부터 인증서에 대한 도전을 받게 되며, 유효한 인증서인 경우 인증서를 사용하도록 합니다.

4. ATS(App Transport Security) 설정

앱이 iOS 9 이상에서 실행되는 경우, Apple은 App Transport Security(ATS)를 요구합니다. ATS는 암호화된 연결을 강제하기 위해 사용되며, 기본적으로 유효한 SSL/TLS 인증서 없이는 연결을 허용하지 않습니다.

따라서, 앱의 Info.plist 파일에 올바른 ATS 설정을 추가해야 합니다. 아래의 코드는 모든 연결에 대해 유효한 인증서 없이 연결이 가능하도록 설정합니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

참고: 실제 앱 배포 시에는 정확한 ATS 설정을 적용하는 것이 안전합니다.

요약

위의 단계를 따라 Swift 언어로 작성된 iOS 앱에서 SSL/TLS 인증서를 구현할 수 있습니다. 인증서를 가져오고 URLSession을 구성한 다음, URLSessionDelegate를 사용하여 인증서의 유효성을 확인하고 ATS 설정을 추가하는 것을 잊지 마세요.

참고: ATS 설정은 보안을 강화하기 위해 설계된 기능이므로, 신뢰할 수 있는 인증서를 사용하는 것이 좋습니다.

참고 자료