[ios] 전송 보안이 일반 텍스트 HTTP를 차단했습니다

info.plist다음 오류 메시지에 따라 HTTP 모드를 활성화 하려면 어떤 설정을해야 합니까?

전송 보안이 안전하지 않기 때문에 일반 텍스트 HTTP (http : //) 리소스로드를 차단했습니다. 앱의 Info.plist 파일을 통해 임시 예외를 구성 할 수 있습니다.

Xcode

내 도메인이라고 가정합니다 example.com.



답변

Xcode 8.0 이상 및 Swift 2.2 이상 또는 Objective C를 사용하는 경우 :

여기에 이미지 설명을 입력하십시오

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>


답변

NSAppTransportSecurity 사용 :

여기에 이미지 설명을 입력하십시오

당신은 설정해야 NSAllowsArbitraryLoads의 핵심 YES 에서 NSAppTransportSecurity의 당신의 Info.plist 파일에 사전을.

Plist 구성


답변

시각적으로 설정은 다음과 같습니다.

Xcode GUI를 통한 info.plist의 NSAllowsArbitraryLoads에 대한 시각적 설정


답변

포럼 게시물 Application Transport Security?를 참조하십시오 . .

iOS 9 및 OSX 10.11에서 앱 전송 보안 예외 구성 페이지도 참조하십시오 .

예를 들어 다음과 같은 특정 도메인을 추가 할 수 있습니다.

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>example.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>

게으른 옵션은 다음과 같습니다.

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

노트 :

info.plist 는 XML 파일이므로이 코드를 파일의 어느 곳에 나 배치 할 수 있습니다.


답변

이것은 테스트되었으며 iOS 9 GM 시드에서 작동했습니다. 이는 특정 도메인이 HTTPS 대신 HTTP를 사용할 수 있도록 구성되었습니다 .

<key>NSAppTransportSecurity</key>
<dict>
      <key>NSAllowsArbitraryLoads</key>
      <false/>
       <key>NSExceptionDomains</key>
       <dict>
            <key>example.com</key> <!--Include your domain at this line -->
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSTemporaryExceptionMinimumTLSVersion</key>
                <string>TLSv1.1</string>
            </dict>
       </dict>
</dict>

NSAllowsArbitraryLoads모든 안전하지 않은 연결을 false허용하지 않기 때문에 이어야 하지만 예외 목록에서는 HTTPS없이 일부 도메인에 연결할 수 있습니다 .


답변

이것은 plist에 이것을 추가하는 빠른 해결 방법이지만 권장되지는 않습니다.

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

어떤 의미입니까 ( Apple의 문서 에 따름 ) :

NSAllowsArbitraryLoads
NSExceptionDomains 사전에 나열되지 않은 모든 도메인에 대해 App Transport Security를 ​​비활성화하는 데 사용되는 부울 값입니다. 나열된 도메인은 해당 도메인에 지정된 설정을 사용합니다.

기본값 NO는 모든 연결에 대한 기본 App Transport Security 동작이 필요합니다.

나는 정말로 링크를 추천한다 :

이유와 모든 의미를 이해하는 데 도움이됩니다.

아래의 XML (파일 Info.plist)은 다음과 같습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
    </dict>
</dict>

모든 페이지에 대한 임의의 호출을 허용하지 않지만 PAGE_FOR_WHICH_SETTINGS_YOU_WANT_TO_OVERRIDE연결이 HTTP 프로토콜을 사용하도록 허용합니다.

위의 XML에 다음을 추가 할 수 있습니다.

<key>NSIncludesSubdomains</key>
<true/>

지정된 주소의 하위 도메인에 대해 안전하지 않은 연결을 허용하려는 경우

최선의 방법은 모든 임의의로드를 차단하고 (false로 설정) 예외를 추가하여 알려진 주소 만 허용하는 것입니다.

관심있는 독자들에게

2018 업데이트 :

Apple 은이 기능을 끄지 않는 것이 좋습니다. 더 많은 정보는 207 세션 WWDC 2018 에서 보안과 관련하여 더 많은 설명이 나와 있습니다.

역사적인 이유와 개발 단계에 대한 원래의 대답을 남기기


답변

이 문제가 발생 하는 이유 와 그 해결 방법 에 대해 더 자세한 내용을 알고 싶은 분은 아래를 읽으십시오.

iOS 9가 도입됨에 따라 앱과 웹 서비스 간의 연결 보안을 향상 시키려면 앱과 웹 서비스 간의 보안 연결이 모범 사례를 따라야합니다 . 모범 사례 동작은 App Transport Security 에 의해 다음과 같이 시행됩니다 .

  • 우발적 인 공개를 방지하고
  • 안전한 기본 동작을 제공하십시오.

App Transport Security Technote에 설명 된 대로 웹 서비스와 통신 할 때 App Transport Security에는 다음 요구 사항과 동작이 있습니다.

  • 서버는 최소한 TLS (Transport Layer Security) 프로토콜 버전 1.2를 지원해야합니다.
  • 연결 암호는 순방향 보안을 제공하는 암호로 제한됩니다 (아래 암호 목록 참조).
  • 인증서는 2048 비트 이상의 RSA 키 또는 256 비트 이상의 ECC (Elliptic-Curve) 키와 함께 SHA256 이상의 서명 해시 알고리즘을 사용하여 서명해야합니다.
  • 유효하지 않은 인증서는 하드 실패로 연결되지 않습니다.

즉, 웹 서비스 요청은 a.) HTTPS를 사용 하고 b.) 순방향 보안이있는 TLS v1.2를 사용하여 암호화해야합니다.

그러나 다른 게시물에서 언급했듯이 앱에서 안전하지 않은 도메인을 지정하여 App Transport Security에서이 새로운 동작을 재정의 할 수 있습니다 Info.plist.


재정의하려면 NSAppTransportSecurity> NSExceptionDomains사전 속성을 에 추가해야 합니다 Info.plist. 다음으로 웹 서비스의 도메인을 NSExceptionDomains사전에 추가합니다 .

예를 들어, www.yourwebservicehost.com 호스트에서 웹 서비스에 대한 App Transport Security 동작을 무시하려면 다음을 수행하십시오.

  1. Xcode에서 앱을 엽니 다.

  2. Info.plist프로젝트 네비게이터 에서 파일을 찾아서 마우스 오른쪽 단추로 클릭 한 후 다른 이름으로 열기 > 소스 코드 메뉴 옵션을 선택하십시오. 속성 목록 파일이 오른쪽 창에 나타납니다.

  3. 다음 특성 블록을 기본 특성 사전 (첫 번째 아래) 안에 넣으십시오 <dict>.


<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

추가 도메인에 대한 예외를 제공해야하는 경우 아래에 다른 사전 속성을 추가합니다 NSExceptionDomains.

위에서 참조한 키에 대한 자세한 정보는 이미 언급 된 기술 노트를 읽으십시오 .