개발/iOS

[iOS] ATS(App Transport Security) 설정

라니킴 2023. 1. 26. 16:45

 

ATS(App Transport Security)는 HTTP 연결의 기본 보안에 대한 변경 사항에 대한 설명이다.

 

ATS 설정을 통해 네트워크 보안 레벨을 설정할 수 있다. ATS는 기본적으로 보안성을 높이기 위해서 안전하지 않은 연결은 허용하지 않는다.

 

☑️HTTP/ HTTPS

HTTP로 연결하면 모든 데이터가 일반 텍스트로 전달된다. 비밀번호와 같이 보안이 중요한 데이터가 유출될 위험이 높다.

반면 HTTPS 연결 시에는 통신 시에 모든 데이터를 암호화해서 전달한다.

그렇기 때문에 Apple 기본 보안 설정에서는 HTTP로 연결을 막고 있다. 그래서 HTTP 연결이 필요한 경우 ATS 설정을 변경해주어야 한다.


ATS 설정

NSAppTransportSecurity Setting에서 가능한 전체 키와 구조

NSAppTransportSecurity : Dictionary {
    NSAllowsArbitraryLoads : Boolean // ATS 활성화 상태
    NSAllowsArbitraryLoadsForMedia : Boolean //YES: 미디어 요청시 HTTP 허용
    NSAllowsArbitraryLoadsInWebContent : Boolean // YES: 웹뷰에서 HTTP 허용
    NSAllowsLocalNetworking : Boolean // Local network
    NSExceptionDomains : Dictionary {
        <domain-name-string> : Dictionary {
            NSIncludesSubdomains : Boolean
            NSExceptionAllowsInsecureHTTPLoads : Boolean // YES: HTTP 연결 허용
            NSExceptionMinimumTLSVersion : String
            NSExceptionRequiresForwardSecrecy : Boolean   // Default value is YES
            NSRequiresCertificateTransparency : Boolean
        }
    }
}

Info.plist에서 키 설정을 해준다.

NSAppTransportSecurity

 

NSAllowsArbitraryLoads 키의 기본 값은 NO

YES로 설정하면 ATS가 제공하는 보안을 무력화시킨다. 모든 HTTP 연결 요청을 허용하게 되는 것이다.

NSAllowsArbitraryLoads : Boolean // ATS 활성화 상태
NSAllowsArbitraryLoadsForMedia : Boolean //YES: 미디어 요청 시 HTTP 허용 NSAllowsArbitraryLoadsInWebContent : Boolean // YES: 웹뷰에서 HTTP 허용

세 키를 YES로 설정 시 보안을 최저 수준으로 설정하는 것이기 때문에 최후의 보류로 사용해야 한다.

 

개별 예외 도메인 설정

HTTP 연결이 필요한 경우 전역 ATS 설정을 하는 것보다 개별 도메인에 설정을 해주는 것이 보안상 더 좋은 방법이다.

[NSExceptionDomains]

NSExceptionDomains

 

모바일 환경과 웹 환경에서 url 주소가 다르기 때문에 서브 도메인 허용하는 설정을 추가해줘야 한다. 그렇지 않으면 도메인 에러가 발생하는 것을 확인할 수 있다.

 

서브 도메인 허용하기

💡 ATS 설정 키를 YES로 설정하면 앱 심사 시 리젝이 될 확률이 크므로 최대한 변경하지 않고 기본 값을 그대로 사용하는 것이 좋다.

 

 

 

 

https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity

 

Apple Developer Documentation

 

developer.apple.com

NSAppTransportSecurity Setting에서 가능한 전체 키와 구조

 

Cocoa Keys

Cocoa Keys Cocoa and Cocoa Touch are the environments used to define apps that run in macOS, iOS, tvOS, and watchOS. The keys associated with the Cocoa environments provide support for Interface Builder nib files and provide support for other user-facing f

developer.apple.com