sourcetip

iOS 9에서 App Transport Security가 활성화된 HTTP URL을 로드하려면 어떻게 해야 합니까?

fileupload 2023. 5. 3. 21:41
반응형

iOS 9에서 App Transport Security가 활성화된 HTTP URL을 로드하려면 어떻게 해야 합니까?

그래서 어젯밤 출시된 iOS의 새로운 베타 SDK에는 개발자들이 http 대신 https를 사용하도록 권장하는 "앱 전송 보안"이 있습니다.원칙적으로 이것은 좋은 생각이며, 저는 이미 스테이징/제작 환경에서 https를 사용하고 있습니다.하지만 iOS 앱이 노트북에서 실행 중인 웹 서비스에 연결되어 있을 때 로컬 개발 환경에 https가 설정되어 있지 않습니다.

오늘 아침에 조금 노는 것으로 보아, 당신이 http URL을 건네주더라도, URL 로딩 시스템이 대신 https를 사용하기로 결정할 것으로 보입니다.특정 URL에 대해서만이라도 이 동작을 비활성화하는 방법을 아는 사람이 있습니까?

자세한 내용은 Apple의 Info.plist 참조를 참조하십시오(감사합니다 @gnasher729).

Info.plist의 특정 도메인에 대한 예외를 추가할 수 있습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

제외된 각 도메인의 모든 키는 선택 사항입니다.연사는 어떤 열쇠에 대해서도 자세히 설명하지 않았지만, 저는 그것들이 모두 상당히 명백하다고 생각합니다.

(출처: WWDC 2015 세션 703, "개인정보와 당신의 앱", 30:18)

앱에 적절한 이유가 있는 경우 키 하나로 모든 앱 전송 보안 제한을 무시할 수도 있습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

앱에 정당한 이유가 없는 경우 거부될 위험이 있습니다.

NSAslowsArbitraryLoads를 true로 설정하면 작동할 수 있지만, 애플은 특정 이유 없이 이 플래그를 사용하는 앱을 거부하려는 의도가 매우 분명했습니다.NSAslowsArbitraryLoads를 사용하는 주된 이유는 사용자가 만든 콘텐츠(링크 공유, 사용자 지정 웹 브라우저 등)일 것입니다.이 경우에도 Apple은 사용자가 제어 중인 URL에 대해 ATS를 적용하는 예외를 포함하기를 기대합니다.

TLS 1.2를 통해 제공되지 않는 특정 URL에 대한 액세스가 필요한 경우 해당 도메인에 대한 특정 예외를 작성해야 하며, 예로 설정된 NSAlowsArbitraryLoads를 사용하지 않아야 합니다.자세한 내용은 NSURL 세션 WWDC 세션에서 확인할 수 있습니다.

NSAslowsArbitaryLoads 솔루션을 공유할 때 주의하십시오.이것은 Apple에서 권장하는 해결책이 아닙니다.

kcharwood (고맙다 @https-https:/kcharwood

승인된 답변에 필요한 정보가 제공되었으며 App Transport Security 사용 및 비활성화에 대한 자세한 내용은 에 대한 자세한 내용을 확인할 수 있습니다.

도메인별 예외의 경우 Info.plist에 다음을 추가합니다.

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>

하지만 사용해야 하는 모든 보안되지 않은 도메인을 모르는 경우에는 어떻게 해야 합니까?Info.plist에서 다음 키 사용

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

자세한 내용은 이 링크에서 확인할 수 있습니다.

이것을 따라했습니다.

info.plist에 키를 추가하여 해결했습니다.제가 수행한 단계는 다음과 같습니다.

  1. info.plist

  2. 호된키추라는 되었습니다.NSAppTransportSecurityDictionary.

  3. 과 같은 되었습니다.NSAllowsArbitraryLoads~하듯이Boolean값을 다음으로 설정합니다.YES아래 이미지와 같이.여기에 이미지 설명 입력

프로젝트를 정리하면 이전과 같이 모든 것이 정상적으로 실행됩니다.

참조 링크.

로컬 개발 서버에 대한 앱 전송 정책을 사용하지 않으려면 다음 솔루션이 제대로 작동합니다.HTTPS를 설정할 수 없거나 비현실적인 경우(예: Google App Engine dev 서버를 사용하는 경우) 유용합니다.

그러나 다른 사람들이 말했듯이, 프로덕션 앱을 위해 ATP를 사용하지 않아야 합니다.

디버그에 다른 목록 사용

Plist 파일을 복사하고 NSAlowsArbitaryLoads.디버깅하려면 이 Plist를 사용합니다.

XCode 디버그

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

로컬 서버 제외

또는 단일 plist 파일을 사용하고 특정 서버를 제외할 수 있습니다.그러나 IP 4 주소를 제외할 수는 없는 것 같습니다. 따라서 서버 이름을 대신 사용해야 할 수도 있습니다(시스템 기본 설정 -> 공유 또는 로컬 DNS에서 구성 참조).

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>server.local</key>
        <dict/>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
    </dict>
</dict>

나는 리스트 파일을 해결했습니다.

  1. NSAppTransportSecurity : Dictionary를 추가합니다.
  2. "NSAllowsArbitaryLoads"라는 하위 키를 부울로 추가: YES

여기에 이미지 설명 입력

위의 구성은 저에게 적용되지 않았습니다.여러 키 조합을 시도해 봤는데, 이 키는 잘 작동합니다.

여기에 이미지 설명 입력

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>mydomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

@addurdin 및 @User가 제공한 답변 편집

& info.plist & change에 합니다.localhost.com해당 도메인 이름을 사용하여 여러 도메인을 추가할 수도 있습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>localhost.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>
</plist>

info.plist는 다음과 같이 표시되어야 합니다.

여기에 이미지 설명 입력

제가 성공한 것은 다음과 같습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key><!-- your_remote_server.com / localhost --></key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
        </dict>
    <!-- add more domain here -->
    </dict>
</dict>

저는 다른 사람들을 돕고 시간을 절약하기 위해 이것을 추가하고 싶습니다.

다음을 사용하는 경우:CFStreamCreatePairWithSocketToHosthost당신이 가지고 있는 것과 같습니다..plist또는 소켓에 대한 별도의 도메인이 있는 경우 거기에 추가하면 됩니다.

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)/*from .plist*/, (unsigned int)port, &readStream, &writeStream);

이것이 도움이 되기를 바랍니다.건배.:)

언급URL : https://stackoverflow.com/questions/30731785/how-do-i-load-an-http-url-with-app-transport-security-enabled-in-ios-9

반응형