iOS 9 / OS X 10.11 앱 네트워크 보안 정책
iOS 9과 OS X 10.11 에 앱 네트워크 보안(App Transport Security) 이라는 정책이 새롭게 추가되었다. 이로 인해서 구글에서도 애드센스 관련해서 뭔가 말이 많았던것 같은데, 나도 개발 도중에 문제를 겪었기에 메모하는 겸 블로그로 정리해 본다. 아 참고로 이 내용은 애플에서도 개발중인 내용이라 추후에 변경될 가능성이 있다고 한다.
혹시나 앱 실행 도중 아래와 같은 경고팝업이 뜨면서 네트워크에 제한이 걸린다면 이 보안정책에 따라 발생한 것이라고 생각하자.
이 문제를 해결하기 위해 Info.plist 파일을 수정해야 한다. 아래 내용은 Info.plist에 넣을 키 구조이다.
그리고 여기 아래에는 두 가지 종류의 키 중 하나가 올 수 있다. 하나는
두 가지 중 하나의 방향을 골라서 설정해보자.
Boolean 값인 이 설정을 YES로 세팅하면 앱 내의 모든 통신에 제한을 가하지 않게 된다. 즉, 이전 iOS / OS X버전들과 동작이 동일해 진다.
물론 애플에서 일부러 보안기능을 기본적으로 켜 놓은 것을 보면 분명 중요한 이슈일지도 모르겠지만, 급하다면 이 키 하나만 YES로 넣으면 문제는 해결된다는 말이다.
만약 (그럴 일은 별로 없겠지만) 상세한 보안 설정이 필요하다면 이어지는 내용도 참고하자.
이 사전형 키에 사이트 별로 예외라던가 보안 요구사항 등을 설정할 수 있다. 일종의 Whitelist 라고 생각하자.
이 키 안에는 바로 사이트 도메인 이름(예를 들어 애플 홈페이지라면
[관련링크] App Transport Security Technote
혹시나 앱 실행 도중 아래와 같은 경고팝업이 뜨면서 네트워크에 제한이 걸린다면 이 보안정책에 따라 발생한 것이라고 생각하자.
... the resource could not be loaded because the app transport security policy requires the use of a secure connection ...iOS 9 에서는 아래와 같이 메시지가 변경된 것 같다:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
이 문제를 해결하기 위해 Info.plist 파일을 수정해야 한다. 아래 내용은 Info.plist에 넣을 키 구조이다.
NSAppTransportSecurity
(Dictionary)NSAllowsArbitraryLoads
(Boolean)NSExceptionDomains
(Dictionary)- 예외로 처리할 도메인 이름(domain-name-for-exception-as-string) (Dictionary)
NSExceptionMinimumTLSVersion
(String)NSExceptionRequiresForwardSecrecy
(Boolean)NSExceptionAllowsInsecureHTTPLoads
(Boolean)NSIncludesSubdomains
(Boolean)NSThirdPartyExceptionMinimumTLSVersion
(String)NSThirdPartyExceptionRequiresForwardSecrecy
(Boolean)NSThirdPartyExceptionAllowsInsecureHTTPLoads
(Boolean)
NSAppTransportSecurity
라는 항목이 메인 항목이다.그리고 여기 아래에는 두 가지 종류의 키 중 하나가 올 수 있다. 하나는
NSAllowsArbitraryLoads
라는 단순무식한(?) 설정이 있고, 나머지 하나는 NSExceptionDomains
라고 개별 도메인별로 설정을 할 수 있는 항목이 있다.두 가지 중 하나의 방향을 골라서 설정해보자.
NSAllowsArbitraryLoads
Boolean 값인 이 설정을 YES로 세팅하면 앱 내의 모든 통신에 제한을 가하지 않게 된다. 즉, 이전 iOS / OS X버전들과 동작이 동일해 진다.
물론 애플에서 일부러 보안기능을 기본적으로 켜 놓은 것을 보면 분명 중요한 이슈일지도 모르겠지만, 급하다면 이 키 하나만 YES로 넣으면 문제는 해결된다는 말이다.
만약 (그럴 일은 별로 없겠지만) 상세한 보안 설정이 필요하다면 이어지는 내용도 참고하자.
NSExceptionDomains
이 사전형 키에 사이트 별로 예외라던가 보안 요구사항 등을 설정할 수 있다. 일종의 Whitelist 라고 생각하자.
이 키 안에는 바로 사이트 도메인 이름(예를 들어 애플 홈페이지라면
www.apple.com
)으로 구성된 하나 이상의 사전형 키들이 존재하고, 각 키 아래에는 보안설정이 들어간다:
NSExceptionMinimumTLSVersion
: TLS 최소 버전을 문자열로 입력한다. 아래 값들 중 하나를 넣을 수 있거나 생략할 수 있다.TLSv1.0
TLSv1.1
TLSv1.2
(생략할 경우의 기본값)NSExceptionRequiresForwardSecrecy
: forward secrecy 라는 비밀키 암호화와 관련된 설정인데 설명하긴 너무 크니 생략한다. 어쨌거나 이걸 쓰려면 YES로 설정하자. 어차피 기본값이 YES다.NSExceptionAllowsInsecureHTTPLoads
: HTTPS(SSL) 연결이 아니더라도 통신을 허용할 것인가를 YES 혹은 NO로 설정 할 수 있다. NO가 기본값으로 HTTPS를 강제하게 된다.NSIncludesSubdomains
: 이 사이트의 하부도메인들에도 이 설정을 적용할 것인가를 YES 혹은 NO로 설정 할 수 있다. 기본값은 NO이다. 하지만 아마도 YES가 많이 쓰이겠지 -_-NSThirdPartyExceptionMinimumTLSVersion
: 써드파티 TLS 버전을 입력 할 수 있다. 아마도 별로 설정 할 필요는 없을 것이다. 무시하자.NSThirdPartyExceptionRequiresForwardSecrecy
: 역시 써드파티 Forward Secrecy 설정. 별 일 없다면 무시하자.NSThirdPartyExceptionAllowsInsecureHTTPLoads
: 역시나 써드파티 HTTPS 연결 강제를 설정하는 거다. 역시 별 일 없다면 무시하자.
[관련링크] App Transport Security Technote
댓글