iOS9 HTTPS

8946 단어
원문 주소:https://github.com/ChenYilong/iOS9AdaptationTips
 
App Transport Security에 관해서는 모든 응용 프로그램이 4개의 큰 종류 중 하나에 속한다.우리는 모든 종류가 어떻게 응용에 영향을 미치는지 봅시다.
--
분류
설명하다
일.
HTTPS Only(HTTPS만 해당, 모든 경우 ATS 사용)
만약 당신의 응용 프로그램이 HTTPS를 지원하는 서버만을 기반으로 한다면, 당신의 응용 프로그램은 어떠한 변화도 할 필요가 없습니다.단, App Transport Security는 TLS 1.2를 요구하고 사이트에서 forward secrecy 프로토콜을 지원하는 비밀번호를 사용하도록 요구합니다.인증서도 ATS 규격에 부합해야 한다.따라서 당신의 응용 프로그램과 상호작용하는 서버가 ATS의 요구에 부합되는지 신중하게 검사하세요.
이.
Mix & Match(혼합)
만약 당신의 서버가 ATS 요구에 부합되지 않는다면, 당신의 응용 프로그램에 대한 정보가 필요합니다.plist 파일에서 ATS 요구 사항에 맞지 않는 주소를 설명합니다.
삼.
Opt Out(ATS 비활성화)
만약 웹 브라우저를 만들고 있다면, 사용자가 어느 웹 페이지에 방문할지 확인할 수 없고, 이 웹 페이지들이 ATS 요구를 지원하는지 HTTPS에서 전송할 수 없습니다.이 경우 ATS 비활성화로만 구성할 수 있습니다.
사.
Opt Out With Exceptions(특별한 경우를 제외하고는 ATS를 사용하지 않음)
ATS를 사용하지 않으려면 예외를 정의해야 합니다.이 응용 장면은 응용 프로그램이 ATS의 요구에 부합되지 않는 많은 서버에서 데이터를 추출해야 하지만 당신이 제어할 수 있는 API(ATS의 요구에 부합)와 상호작용을 해야 한다.이 경우 응용 중인 Info가 필요합니다.plist 파일에는 모든 요청을 허용하도록 설정되어 있지만, 어떤 요청이 ATS의 요구에 부합되어야 하는지를 표시하기 위해 하나 이상의 예외를 지정합니다.
다음은

1. HTTPS Only(HTTPS만 해당, 모든 경우 ATS 사용)


만약 당신의 응용 프로그램이 HTTPS를 지원하는 서버에만 기반을 두고 있다면, 당신은 정말 운이 좋습니다.너의 응용은 어떠한 변화도 할 필요가 없다.
유일하게 해야 할 일은 사용NSURLSession이다.만약 당신의 개발 목표가 iOS 9이나 OS X EI Capitan이라면 ATS의 최선의 실천은 NSURLSession 기반의 모든 네트워크에 적용될 것입니다.
그러나 일각에서는 서버가 TLS 1.2 SSL을 지원하지만 iOS9에서는 안 되고 본고에서 제시한 적절한 조작을 해야 한다는 의혹을 겪은 적이 있다.
그것은 App Transport Security가 TLS 1.2를 요구하고 사이트에서 forward secrecy 프로토콜을 지원하는 비밀번호를 사용하도록 요구하기 때문이다.인증서도 ATS 규격에 부합되는 것을 요구한다. ATS는 유명 CA가 발급한 인증서만 신뢰하고 작은 회사가 사용하는 selfsigned certificate는 ATS에 의해 차단된다.따라서 당신의 응용 프로그램과 상호작용하는 서버가 ATS의 요구에 부합되는지 신중하게 검사하는 것이 매우 중요하다.이에 따라 아래에 제시된 NSException Domains를 사용하고 당신 회사의 도메인 이름을 아래에 걸어 두는 것을 권장합니다.
CA에 대한 공식 문서 App Transport Security Technote의 인증서 요구 사항:
Certificates must be signed using a SHA256 or better signature hash algorithm, with either a 2048 bit or greater RSA key or a 256 bit or greater Elliptic-Curve (ECC) key. Invalid certificates result in a hard failure and no connection

2. Mix & Match(혼합)


만약 당신의 서버가 ATS 요구에 부합되지 않는다면.
예를 들어 ATS의 요구에 부합되지 않는 세 서버의 도메인 이름을 만났을 때:
  • api.insecuredomain.com
  • cdn.domain.com
  • thatotherdomain.com

  • 다음과 같이 각각 설정할 수 있습니다.
  • api.insecuredomain.com Info.plist 구성의 XML 소스는 다음과 같습니다.
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSExceptionDomains</key>
          <dict>
              <key>api.insecuredomain.com</key>
              <dict>
    
                  <!-- App HTTP -->
                  <key>NSExceptionAllowsInsecureHTTPLoads</key>
                  <true/>
    
                  <!-- -->
                  <key>NSIncludesSubdomains</key>
                  <true/>
              </dict>
          </dict>
      </dict>
    

      
    plist 파일에 다음과 같이 표시됩니다. 우리가 정의한 첫 번째 "예외"(Exception) 는 ATS가 이 하위 영역과 상호작용할 때 HTTPS를 사용해야 하는 요구를 취소했다고 알려 줍니다.예외(Exception)에서만 선언된 하위 도메인에 대해 주의하십시오.중요한 점은 NSExceptionAllows Insecure HTTPLoads 키워드가 HTTPS 사용에만 관련된 것이 아니라는 것을 이해하는 것이다.이 예외 (Exception) 는 도메인 이름에 대한 모든 App Transport Security의 요구가 취소되었다는 것을 가리킨다.
  • cdn.domain.com Info.plist 구성의 XML 소스는 다음과 같습니다.
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSExceptionDomains</key>
          <dict>
              <key>cdn.somedomain.com</key>
              <dict>
                  <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                  <string>TLSv1.1</string>
              </dict>
          </dict>
      </dict>
    

      
    plist 파일에 다음과 같이 표시됩니다. 아마도 당신의 응용 프로그램은 HTTPS 전송 데이터를 지원하는 서버와 상호작용을 하는 것일 것입니다. 그러나 TLS 1.2 이상을 사용하지 않았습니다.이 경우 가장 작은 TLS 버전을 가리키는 예외 (Exception) 를 정의합니다.이것은 그 도메인 이름을 완전히 취소한 App Transport Security보다 더 좋고 안전하다.
  • thatotherdomain.com Info.plist 구성의 XML 소스는 다음과 같습니다.
    <key>NSAppTransportSecurity</key>
          <dict>
              <key>NSExceptionDomains</key>
              <dict>
                  <key>thatotherdomain.com</key>
                  <dict>
                      <!-- -->
                      <key>NSIncludesSubdomains</key>
                      <true/>
                      <!-- :  forward secrecy  -->
                      <key>NSExceptionRequiresForwardSecrecy</key>
                      <false/>
                      <!-- App HTTP -->
                      <key>NSExceptionAllowsInsecureHTTPLoads</key>
                      <true/>
                      <!--  TLS  -->
                      <key>NSExceptionMinimumTLSVersion</key>
                      <string>TLSv1.1</string>
                  </dict>
              </dict>
          </dict>
    

      
    plist 파일에 다음과 같이 표시됩니다. NSIncludesSubdomains 키워드는 App Transport Security라는'예외'(Exception) 가 이 특정 도메인 이름의 모든 하위 도메인에 적용된다는 것을 알려 줍니다.이 예외 (Exception) 는 받아들일 수 있는 암호 목록을 확장해서 이 도메인 이름이forward secrecy (NSExceptionRequiresForwardSecrecy 프로토콜을 지원하지 않는 암호를 사용할 수 있도록 정의합니다.forward secrecy에 대한 더 많은 정보를 알고 싶으면 공식 문서인 Apple's technote를 추천합니다.

  • 만약 당신의 앱에 이 세 개의 도메인 이름이 동시에 사용된다면 다음과 같이 해야 한다.
     <key>NSAppTransportSecurity</key>
            <dict>
                <key>NSExceptionDomains</key>
                <dict>
                    <key>api.insecuredomain.com</key>
                    <dict>
                        <key>NSExceptionAllowsInsecureHTTPLoads</key>
                        <false/>
                    </dict>
                    <key>cdn.somedomain.com</key>
                    <dict>
                        <key>NSThirdPartyExceptionMinimumTLSVersion</key>
                        <string>TLSv1.1</string>
                    </dict>
                    <key>thatotherdomain.com</key>
                    <dict>
                        <key>NSIncludesSubdomains</key>
                        <true/>
                        <key>NSExceptionRequiresForwardSecrecy</key>
                        <false/>
                    </dict>
                </dict>
            </dict>
    

      

    3. Opt Out(ATS 비활성화)


    위에서 설명한 바와 같이 특정 HTTP에 액세스할 수 있는 방법을 지정합니다.물론 폭력적인 방법도 있다. 안전하지 않은 HTTP 네트워크 요청으로 철저히 후퇴하고 임의로 HTTP 요청을 할 수 있다. 예를 들어 브라우저 앱을 개발하고 있거나 게으름을 피우고 싶거나 백그라운드에서 게으름을 피우고 싶거나 회사에서 서버를 업그레이드해 주지 않는다.
    너는 Info에서 할 수 있다.plist 구성에서 다음 XML 소스를 사용합니다.
        <key>NSAppTransportSecurity</key>
        <dict>
            <!-- HTTP , HTTP  ( )-->
            <key>NSAllowsArbitraryLoads</key>
            <true/>
        </dict>
    

      
    plist 파일에는 다음과 같이 표시됩니다.

    4. Opt Out With Exceptions(특별한 경우를 제외하고는 ATS를 사용하지 않음)


    위에서 이미 세 가지 상황을 소개했는데, 또 하나는 당신도 만날 수 있을 것이다.
    ATS를 비활성화하면서 예외(Exception)를 정의하려고 합니다.이 응용 장면은 응용 프로그램이 ATS의 요구에 부합되지 않는 많은 서버에서 데이터를 추출해야 하지만 당신이 제어할 수 있는 API(ATS의 요구에 부합)와 상호작용을 해야 한다.이 경우 의 Info.plist 파일에는 모든 요청을 허용하도록 설정되어 있지만, 어떤 주소가 App Transport Security 요구에 부합되어야 하는지를 표시하기 위해 예외 (Exception) 를 하나 이상 지정합니다.다음은 Info입니다.plist 파일의 내용은 다음과 같습니다.
    <key>NSAppTransportSecurity</key>
            <dict>
                <key>NSAllowsArbitraryLoads</key>
                <true/>
                <key>NSExceptionDomains</key>
                <dict>
                    <key>api.tutsplus.com</key>
                    <dict>
                        <key>NSExceptionAllowsInsecureHTTPLoads</key>
                        <false/>
                    </dict>
                </dict>
            </dict>
    

      
    plist 파일에는 다음과 같이 표시됩니다.
     
     

    Certificate Transparency


    ATS의 대부분의 보안 기능은 기본적으로 사용할 수 있지만, Certificate Transparency는 반드시 설정해야 합니다.Certificate Transparency를 지원하는 인증서가 있다면, NSRequiresCertificateTransparency 키워드를 확인하여 Certificate Transparency를 사용할 수 있습니다.인증서가 Certificate Transparency를 지원하지 않으면 사용할 수 없도록 설정해야 합니다.
    ATS 사용으로 인해 발생하는 문제를 디버깅하려면 CFNETWORK_DIAGNOSTICS가 1이면 액세스된 URL과 ATS 오류가 포함된 NSURLSession 오류 정보가 인쇄됩니다.ATS가 신뢰성과 확장성을 쉽게 높일 수 있도록 모든 오류 메시지를 처리했는지 확인하십시오.

     

    좋은 웹페이지 즐겨찾기