iOS2015. 8. 28. 16:12


http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/


App Transport Security Technote


앱과 웹서비스간의 보안을 더 향상시킬 수 있는 기능이다.

디폴트연결 요구사항들로 구성한다. 이 요구사항은 보안연결을 위한 최적의 구성을 기술한다.

App은 이 동작에 대해 오버라이드하거나 기능을 아예 꺼버릴 수 있다.

iOS 9.0, OSX 10.11 이후부터 지원한다.


디폴트 동작

iOS 9.0과 OSX 10.11에서 돌아가는 앱에서 NSURLConnection, CFURL 또는 NSURLSession을 이용한 모든 통신은 Transport security의 디폴트 동작을 사용한다.

이 요구사항에 부합하지 않은 모든 연결을 실패할것이다.


ATS 필수 요구사항

- 서버는 Transport Layer Security(TLS) protocol version 1.2이상을 지원해야 한다.

- 암호화는 forward secrecy를 지원하는것들로 제한된다.

- 인증서는 반드시 SHAR256이나 더 발전된 해시알고리즘을 사용해야 한다. 잘못된 인증서는 실패한다.


허용된 암호화

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384

TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA


예외

디폴트 동작에 대한 예외를 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

  디폴트동작을 오버라이드할 셋팅값들을 포함하는 딕셔너리이다. info.plist의 최상위 key값


NSAllowArbitraryLoads

  NSExceptionDomains 딕셔너리에 리스터업되지 않는 도메인들에 대한 ATS를 사용할지 boolean 값으로 정의한다.

  디폴트값은 NO이고 모든 연결들에 대해 ATS를 요구한다.


NSExceptionDomains

  ATS 예외 도메인들의 딕셔너리이다. 각 키는 예외할 도메인명을 담은 문자열이다. named domain이며 예를 들면 www.google.com같은것이다.


NSExceptionMinimumTLSVersion

  최소 TLS버전으로 TLSv1.0, TLSv1.1, TLSv1.2 가 있다. TLSv1.2가 디폴트값이다.


NSExceptionRequiresForwardSecrecy

  도메인이 지원하는 암호화 요구사항을 오버라이드 한다. YES가 디폴트이며 디폴트동작에서 정의한 암호화로 제한다.

  No이면 다음 암호화가 추가된다.


TLS_RSA_WITH_AES_256_GCM_SHA384

TLS_RSA_WITH_AES_128_GCM_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA

TLS_RSA_WITH_AES_128_CBC_SHA256

TLS_RSA_WITH_AES_128_CBC_SHA


NSExceptionAllowsInsecureHTTPLoads

  No가 디폴트값이며 모든 연결이 HTTPS를 사용할지 결정한다. 이 키값으로 도메인이 인증서없이 접근하거나 self-signed로 접근하거나, 만료되거나 호스트명 미스매치 인증으로 접근가능하도록 할 수 있다.

  

NSIncludeSubdomains

  No가 디폴트 값이며 최상위 레벨 도메인의 모든 서브도메인에도 적용할지 결정한다.


NSThirdPartyExceptionMinimumTLSVersion

NSThirdPartyExceptionRequiresForwardSecrecy

NSThirdPartyExceptionAllowsInsecureHTTPLoads

  개발자에의해 앱서비스가 컨트롤되지 않는 도메인의 경우 사용된다. <- 먼소린지???



Posted by 삼스