ATS(App Transport Security)

LEEHAKJIN-VV·2022년 7월 13일
0

iOS Error Solution

목록 보기
2/2

공식 문서를 참고하여 작성한 글입니다.
잘못된 내용은 댓글로 남겨주시면 감사하겠습니다.😎


URLSession을 이용한 네트워크 통신을 구현하는 중 다음 에러를 보게 됨.

App Transport Security has blocked a cleartext HTTP connection since it is insecure. Use HTTPS instead or add Exception Domains to your app's Info.plist.

이는 서버와 HTTPS연결이 아닌 HTTP연결을 시도하면 ATS가 보안상의 이유로 연결을 차단(block) 시키는 문제.

이를 해결하기 위해서는 https 연결을 시도하거나, ATS에 예외를 추가해야 함.

그전에 ATS가 뭔지 간단히 알아보면..

ATS(App Transport Security)

  • App Transport Security(ATS)는 Apple platform에서 앱에 대한 개인 정보 및 무결성을 향상 시키는 네트워크 보안 기능.

  • ATS는 URL을 이용한 통신에서 HTTP 연결 대신 HTTPS 연결을 강제시킴.

  • iOS 9.0, macOS 10.11 이상 버전의 앱부터 지원됨. 이전 버전의 앱들은 ATS를 지원하지 않음

  • ATS에 예외를 추가하는 경우, 앱 스토어 심사 지침에서 정당한 이유를 제공해야 하기 때문에 꼭 필요한 이유가 아니면 무조건 ATS에 예외를 추가하지 않는 것이 좋음

  • TLS 프로토콜 버전 1.2 이상 사용해야 함.(현재 기준)

ATS에 예외 추가

예외를 추가하는 방법은 크게 3가지가 있다.

  • NSAllowsArbitraryLoads값 설정

  • NSAllowsArbitraryLoadsInWebContent값 설정

  • Exception Domain지정

3가지 방법 모두 info.plist파일에서 아래와 같이 App TransPort Security Settings키를 추가해야 함

info.plist 대신에, xml파일을 수정하는 방법도 존재합니다. 그러나 이 방법은 따로 설명하지 않겠습니다.

NSAllowsArbitraryLoads

설정 방법

NSAllowsArbitraryLoads는 모든 네트워크 연결에 대해 ATS의 활성화 여부를 나타내는 Bool 값으로, 기본값은 NO이다. YES로 할당한 경우, 모든 도메인에 대해 ATS를 적용하지 않는다. 단 NSExceptionDomains에서 추가한 도메인은 예외.

해당 값을 YES로 할당한 경우 App store에서 정당한 이유를 제공해야 함. 또한 YES로 값을 할당하면, 앱의 보안을 크게 저하시키기 때문에 서버를 업그레이드하거나(HTTPS로) 또는 예외 도메인 지정과 같은 더 좁은 범위의 예외를 사용하는 것을 권장.

NSAllowsArbitraryLoads키는 버전에 따라 차이가 있는데..

  1. iOS 9.0 or macOS10.11: 다른 global exception이 설정되어 있더라도 무시하며 NSAllowsArbitraryLoads의 기본 값을 NO로 set.

  2. iOS 10.0 or macOS 10.12 이상 버전: 아래 3가지의 키값이 info plist파일에 있는 경우, NSAllowsArbitraryLoads의 키값을 무시하고 기본적인 값 NO set.

다른 global exception key 값 (자세한 내용은 링크 참조)

NSAllowsArbitraryLoadsInWebContent

설정 방법

NSAllowsArbitraryLoadsInWebContent는 더 좁은 범위의 예외로 이 값을 YES로 설정하면 WKWebView의 인스턴스와 같이 웹 보기 내에서 이루어진 호출에 대해 ATS제한을 비활성화 함

이 값도 마찬가지로 YES로 설정한 경우, App store 검토에서 근거를 제공해야 한다.

Exception Domain

설정 방법(swiftapi.rubypaper.co.kr 도메인을 허용하는 경우)

이 방법은 ATS 제한(예외)를 단일 도메인으로 제한하는 것이다. 만약 안전하지 않은 서버인 http:example.com에 접근해야 하는 경우 해당 domain에 대해 NSExceptionAllowsInsecureHTTPLoads값을 YES로 설정한다.

NSExceptionAllowsInsecureHTTPLoads key는 안전하지 않은 HTTP를 허용할지 나타내는 Bool값이다. 기본값은 NO(0)이며 Opitonal이다.

Exception Domain에 추가한 도메인은 다른 global exception에 영향을 받지 않음.

이 값도 마찬가지로 YES로 설정한 경우, App store 검토에서 근거를 제공해야 한다.


ATS에 예외를 추가하는 방법 모두 앱 스토어에 정당한 근거를 제공해야 한다(앱 출시를 하는 상황). 그러므로 특별한 경우가 아니고서는 예외를 추가하지 말자.

참조자료

공식문서

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

https://developer.apple.com/documentation/security/preventing_insecure_network_connections#3138036

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

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

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

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

0개의 댓글