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


1451

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

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

Xcode

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



15
중재자 참고 :이 질문에 이미 36 개의 답변이 있습니다. 다른 솔루션을 추가하기 전에 솔루션이 새로운 것인지 확인하십시오 .
Matt

5
참고 : 여기에 제시된 솔루션은 ATS를 꺼야한다는 제안입니다 ( Allow arbitary loads). 이후 곧이 불가능합니다 애플은 ATS가 필요합니다 - (- 마감 시한이 연장 된 올해의 원래 말) developer.apple.com/news/?id=12212016b
야쿱 Truhlář


@Jeef iOS 10 태그를 추가 한 이유는 무엇입니까? 그 문제에서 iOS 10에 추가 변경 사항이 있습니까? 나는 그것이 iOS9에 도입되었고 그 태그가 iOS 버전의 관점에서 충분해야한다고 생각합니다.
Julian Król

답변:


469

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>

29
왜로 NSAllowsArbitraryLoads설정되어 true있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

6
@ jww 이것은이 게시물의 목적입니다. 오디오를 재생하기 위해 연결해야하는 사이트는 아직 HTTPS를 사용하지 않으며 기다리려고하지 않습니다.
ThinkDigital

5
iOS 10.0 이상 또는 MacOS 10.12 이상에서는 작동하지 않습니다. 실제로 언급 된 것 (example.com)을 제외한 모든 임의의로드를 허용한다고합니다. 따라서 그것은 원하는 것과 반대의 일을 할 것입니다. 여기서 NSAllowsArbirtraryLoads를 false로 설정해야합니다. 더 많은 정보 : 애플 문서
FREEK 샌더스

1
왜 지구상의 모든 사람들이 이것을지지 하는가? 예외 도메인을 설정하면 NSAllowsArbitraryLoads를 사용하는 것이 없습니다.
thibaut noah

1
NSAllowsArbitraryLoads가 true 일 필요는 없으므로 제거해야합니다. NSExceptionDomains만으로도 해당 도메인에만 비보안 연결이 가능합니다. NSAllowsArbitraryLoads = true는 모든 도메인에 대한 비보안 연결을 활성화하므로 여전히 true로 설정하면 NSExceptionDomains가 이미 모든 도메인을 포함하므로 NSExceptionDomains가 말도 안됩니다
mister_giga

950

NSAppTransportSecurity 사용 :

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

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

Plist 구성


157
알려주세요 : 이것은 해결 방법입니다! HTTPS를 통한 HTTP를 사용할 때마다 사용자 장치를 취약성에 노출시킵니다. 물론 많은 경우에 해당되는 것은 아니지만 윤리적 프로그래밍이 가장 좋습니다. 그냥
말하기

36
이것은 해결책이 아닙니다-이것은 해킹입니다! : 개별 도메인 "예외"를 추가하려면 다음이 답변을 참조 stackoverflow.com/a/32560433/1103584
DiscDev

17
이 솔루션은 취약한 것으로 알려져 있지만 DEVELOPMENT 동안 권장 하는 유일한 솔루션 입니다. 개발하는 동안 모든 정확한 도메인을 입력해야하는 것은 어리석은 일입니다 (특히 타사 웹 서비스를 사용하는 경우).
초에 RETs

6
그 키의 이름은 "임의의 부하에게 허용"그 아래에 지금 "앱 운송 보안 설정"변경
이씨 dharankar

11
왜이 솔루션에 반대하는 사람들이 많은가? 이것은 분명히 해킹이 아닙니다! 많은 앱이 보안 프로토콜이 항상 제어되는 것은 아닌 실제 인터넷과 통신해야합니다. 예를 들어 SSL 인증서가없는 다른 서버의 이미지를 표시하는 것이 매우 합리적입니다.
Oren

825

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

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


10
그 옵션이 없습니다.
사용자

25
Info.plist를 직접 열면 NSAppTransportSecurity 사전을 추가 한 다음 그 안에 NSAllowsArbitraryLoads 항목 을 만들 수 있습니다 (아래 Umar Farooq가 편집 한 답변 참조).
Stoph

3
예외 도메인은 7.3에서 작동하지 않았습니다.
RegularExpression

4
이 옵션은 존재하지 않습니다 - 엑스 코드 7.3.1
jameshfisher

3
@JoshPinter의 정보는 XCode 8에서 저에게
효과적이었습니다.

717

포럼 게시물 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 파일이므로이 코드를 파일의 어느 곳에 나 배치 할 수 있습니다.


1
이 코드를 붙여 넣을 위치를 모르기 때문에 Info.plist에이 코드를 추가하는 방법은 무엇입니까?
lmiguelvargasf

2
@lmiguelvargasf 일반 텍스트 편집기에서 info.plist를여십시오
Dan Beaulieu

7
여전히 오류가 발생합니다. 예외 도메인이 설정되어 있고 NSAllowsArbitraryLoads가 false입니다. NSAllowsArbitraryLoads가 true로 설정되어 있어도 오류가 나타납니다. 여기 다른 사람 이이 문제가 있습니까?
klaevv


3
경우에는 다른 사람의 Info.plist에 간단한 변경을하고 있기 때문에 밖으로 자신의 머리를 당겨 것은 .. 프로젝트> 대상> 정보> 사용자 정의 아이폰 OS 대상 등록 정보에 변경 사항 추가 작동하지 않습니다
BlueGuy

330

이것은 테스트되었으며 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없이 일부 도메인에 연결할 수 있습니다 .


7
이 답변으로 표시해야합니다. iOS 9 GM 시드를 테스트하고 작업하여 특정 도메인이 "게으른"방식을 취하지 않고 앱을 완전히 열지 않고도 http를 사용할 수 있습니다.
DiscDev

2
이것을 info.plist에 어떻게 추가합니까?
JMStudios.jrichardson

8
해당 항목을 info.plist에 추가했는데 여전히이 오류가 발생합니다. ""App Transport Security는 안전하지 않기 때문에 일반 텍스트 HTTP (http : //) 리소스로드를 차단했습니다. 임시 예외는 앱의 정보를 통해 구성 할 수 있습니다. .plist 파일. "
KMC

2
@RomanShapovalov IP 주소를 사용해야하는 경우 IP 주소 끝에 .xip.io를 추가하고 NSExceptionDomains에 xip.io를 추가하십시오. xip.io를 참조하십시오 . 개발 할 때 IP에 직접 연결하지만 릴리스하지는 않습니다.
tpankake

2
테스트 프로젝트의 잘못된 info.plist에 넣었다는 것을 깨달을 때까지 저에게 효과가 없었습니다. 올바른 것을 넣으십시오!
처키

144

이것은 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 에서 보안과 관련하여 더 많은 설명이 나와 있습니다.

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


1
NSAllowsArbitraryLoads해야false
사운드 블라스터에게

다운 투표에 대한 답변에서 어떤 경우와 무엇이 잘못되었는지 @SoundBlaster?
Julian Król

(NSAppTransportSecurity의 NSAllowsArbitraryLoads)을 plist에 추가하여, 모든 웹 서비스는 아이폰 OS 9에서 하나의 웹 서비스를 하나의 웹 서비스 반환 내부 서버 오류 (500)를 제외하고 잘 작동하지만 나중에 iOS8의에서 잘 작동 또는
아 미트 굽타

@SoundBlaster 변경, 이제는 반대 의견이 없습니다 :)
Julian Król

고마워, 실제로 어떻게 추가 <key>NSIncludesSubdomains</key> <true/>합니까? 모든 설정을 둘러싸 야 <dict>합니까? 이 망할 plist 파일을 어떻게 편집합니까? 서식은 무엇입니까? : D 감사합니다.
Zebra 요원

116

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

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.

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


1
이것은 내 앱 중 2에서 작동했지만 세 번째 앱에서는 작동하지 않습니다. 다른 사람이 위의 수정 프로그램을 사용하고 동일한 오류 메시지가 계속 표시되는 상황이 발생 했습니까? (예, 코드의 도메인이 아닌 API 도메인을 사용하도록 사전을 업데이트했습니다)
helloB

베스트 ! Apple은이 솔루션이 다음을 사용하여 확인되었음을 확인합니다.
YannSteph

이것은 다양한 TLS / HTTP / HTTPS 조합을 가진 서비스에 대한 예외 도메인이 많은 Cordova / Phonegap / Ionic 앱 편집 파일 ./platforms/ios/<project>/<project>-Info.plist에서 작동했습니다 NSAllowsArbitraryLoads=false. 처음에는 NSAllowsArbitraryLoads=true시행 착오를 거쳤으며 시행 착오를 통해 규칙을 해결하여 지침을 준수하고 승인을 위해 제출했습니다. 참고 config.xml <access origin=.../>문은이 파일을 부분적으로 채우지 만, 현재 세부 사항을 올바르게 얻으려면 직접 편집하거나 XCode를 통해 조정해야합니다.
jimmont

또한 <access origin="*"/>(Config.xml의) 세트 NSAllowsArbitraryLoads=true코도 / 폰갭 / 하이브리드 앱 (
jimmont

왜로 NSExceptionAllowsInsecureHTTPLoads설정되어 true있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

67

plist를 직접 편집하는 것을 좋아하지 않습니다. GUI를 사용하여 plist에 쉽게 추가 할 수 있습니다.

  • 왼쪽의 네비게이터에서 Info.plist를 클릭하십시오.
  • 이제 메인 영역의 데이터를 변경하십시오 :

    • 마지막 줄에 +
    • 그룹 이름을 입력하십시오 : App Transport Security Settings
    • 그룹을 마우스 오른쪽 버튼으로 클릭하고 Add Row
    • 입력 임의로드 허용
    • 오른쪽의 값을 YES로 설정하십시오.

예


명확히하기 위해 : "임의로드 허용"이 YES이고 "예외 도메인"이 있으면 허용되는로드가 예외 도메인의로드로 제한됩니다. 그 맞습니까?

응용 프로그램을 릴리스하려는 경우 안전한 방법입니까?
Lamour

아니요 . 임의의로드를 허용하면 앱이 모든 도메인에 자유롭게 연결할 수 있습니다. 보안 관점에서, 예기치 않은 네트워크 사용을 피하기 위해 앱이 연결될 도메인 / 웹 사이트를 제어하고 제한해야합니다.
랩터

대부분의 앱은 알려진 서버로만 라우팅됩니다. 이것은 개발자가 제어합니다. 따라서 보안 문제가 알려져 있습니다.
Vincent

왜로 NSAllowsArbitraryLoads설정되어 YES있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

25

애플 문서 1

애플 문서 2

이에 대한 두 가지 해결책이 있습니다.

솔루션 1 :

  1. 에서 Info.plist파일 '키를 사용하여 사전을 추가 NSAppTransportSecurity'
  2. 키를 사용하여 사전 내에 다른 요소 추가 'Allow Arbitrary Loads'

Plist 아래 그림과 같이 구조가 나타납니다.

해결책 1

해결책 2 :

  1. 에서 Info.plist파일 '키를 사용하여 사전을 추가 NSAppTransportSecurity'
  2. 키 ' NSExceptionDomains'를 사용 하여 사전 내에 다른 요소 추가
  3. 'MyDomainName.com'NSDictionary 유형의 키 를 가진 요소 추가
  4. NSIncludesSubdomains유형 이 키 ' '인 요소를 추가 Boolean하고 값을YES
  5. NSTemporaryExceptionAllowsInsecureHTTPLoads유형 이 키 ' '인 요소를 추가 Boolean하고 값을YES

Plist 아래 그림과 같이 구조가 나타납니다.

해결책 2

솔루션 2는 선택한 도메인 만 허용하므로 솔루션 1은 모든 안전하지 않은 HTTP 연결을 허용하므로 선호됩니다.


왜로 NSAllowsArbitraryLoads설정되어 YES있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

20

전송 보안은 iOS 9.0 이상에서 사용 가능합니다. 애플리케이션 내에서 WS를 호출하려고 할 때이 경고가 표시 될 수 있습니다.

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

Info.plist에 다음을 추가하면 ATS가 비활성화됩니다.

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

1
그것은 모든 안전하지 않은 연결을 허용 true의 경우 NSAllowsArbitraryLoads는 false 여야
티아고 Arreguy

PLIST에 추가하여 모든 웹 서비스 아이폰 OS 9에서 하나의 웹 서비스를 하나의 웹 서비스 반환 내부 서버 오류 (500)를 제외하고 잘 작동하지만 나중에 iOS8의에서 잘 작동 또는
아 미트 굽타

1
가게에서 받아?
Vrashabh Irde

매우 나쁜 조언; 세계에서 가장 위험한 코드 : 브라우저가 아닌 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 권장되는 방법으로 작업을 수행 할 수있는 질문이 있다면 이와 같은 "나도"답변이 필요하지 않습니다.
jww

15

개발 예

다음은 ATS를 그대로 유지하는 plist의 스크린 샷입니다 (= 보안). 그러나 HTTPS 대신 HTTP를 통해 localhost에 연결할 수 있습니다 . Xcode 7.1.1에서 작동합니다.

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


기본 NSExceptionAllowsInsecureHTTPLoads - YES설정 을 사용할 필요가 없도록 반응 호스트에서 로컬 호스트를 보호하는 방법 (예 : HTTPS 사용)이 있습니까?
milkersarac

13

Info.plist로 이동

  1. 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 행 추가를 클릭하십시오.
  2. 키 이름을 NSAppTransportSecurity로 작성하십시오.
  3. 예외 도메인을 선택하고 여기에 새 항목 추가
  4. 액세스해야하는 도메인 이름을 적어 두십시오
  5. 도메인 유형을 문자열에서 사전으로 변경하고 새 항목을 추가하십시오.
  6. NSTemporaryExceptionAllowsInsecureHTTPLoads는 true 값을 가진 부울입니다. 올바르게 따라 가려면 그림을보십시오

1
왜로 NSAllowsArbitraryLoads설정되어 true있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

13

Apple에 따르면 일반적으로 ATS를 비활성화하면 적절한 이유가없는 한 앱 거부가 발생합니다. 그럼에도 불구하고 안전하게 액세스 할 수있는 도메인에 대한 예외를 추가해야합니다.

Apple에는 사용할 설정을 정확하게 알려주는 훌륭한 도구가 있습니다. 터미널에 다음을 입력하십시오.

/usr/bin/nscurl --ats-diagnostics --verbose https://www.example.com/whatever

nscurl은이 요청이 실패했는지 여부를 확인한 다음 다양한 설정을 시도하고 어떤 설정을 전달하는지 정확히 알려줍니다. 예를 들어, 방문한 일부 타사 URL의 경우이 명령은이 사전이 통과한다고 알려줍니다.

{
    NSExceptionDomains = {
        "www.example.com" = {
            NSExceptionRequiresForwardSecrecy = false;
        };
    };
}

자신의 사이트와 통제 할 수없는 타사 사이트를 구별하려면 예를 들어 NSThirdPartyExceptionRequiresForwardSecrecy 키를 사용하십시오.


1
실제로 응용 프로그램으로 테스트하기 전에 확인하는 훌륭한 도구입니다. 시간을 절약. 그러나이 명령의 출력을 이해하기 위해 읽을 수있는 모든 리소스.
damithH

1
재미있는 도구. 제 경우에는 상황을 과장합니다. 를 포함하여 세 개의 키가 나열되어 NSExceptionAllowsInsecureHTTPLoads = true;있지만 필요하지 않은 것으로 나타났습니다.
Chris Prince

11

이 기술 노트에 언급 된대로 사용할 설정을 자동으로 파악할 수 있습니다 .

/usr/bin/nscurl --ats-diagnostics --verbose https://your-domain.com

분명히 OS X 10.11 (El Capitan)이 필요합니다.
ecotax

10

참고 : plist의 예외 도메인은 LOWER-CASE에 있어야합니다.

예 : 설정-> 공유에서 컴퓨터의 이름을 "MyAwesomeMacbook"으로 지정했습니다. 서버 (테스트 목적으로)가 MyAwesomeMacbook.local : 3000에서 실행 중이고 앱이 http : //MyAwesomeMacbook.local : 3000 / files ... 로 요청을 보내야 합니다. plist에 "myawesomemacbook을 지정해야합니다. 로컬 "을 예외 도메인으로

-

귀하의 info.plist는 ...

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>myawesomemacbook.local</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSExceptionAllowsInsecureHTTPLoads</key>
      <true/>
    </dict>
  </dict>
</dict>

9

사용하다:

PList 더 잘 이해하기위한 스크린 샷

Dictionary 유형의 plist 파일에 NSAppTransportSecurity 새 항목 을 추가 한 다음 Boolean 유형의 사전에 NSAllowsArbitraryLoads 하위 항목을 추가 하고 bool value YES를 설정하십시오 . 이것은 나를 위해 작동합니다.


1
그것은 모든 안전하지 않은 연결을 허용 true의 경우 NSAllowsArbitraryLoads는 false 여야
티아고 Arreguy

plist에 하나의 웹 서비스 하나를 제외한 모든 웹 서비스 가 iOS 9에서는 내부 서버 오류 (500) 를 반환 하지만 iOS8 이상에서는 정상적으로 작동합니다. @ThiagoArreguy
amit gupta

매우 나쁜 조언; 세계에서 가장 위험한 코드 : 브라우저가 아닌 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 권장되는 방법으로 작업을 수행 할 수있는 질문이 있다면 이와 같은 "나도"답변이 필요하지 않습니다.
jww

나는 나쁜 조언을 알고 있지만, 그것은 단지 개발 모드에있는 한 시간 동안의 해결책 일뿐입니다. 애플은 우리에게 유연성을 제공했다.
Tejinder

9

2015-09-25 (2015-09-18의 Xcode 업데이트 후) :

비 게으른 방법을 사용했지만 작동하지 않았습니다. 다음은 나의 시도입니다.

먼저,

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSTemporaryExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

둘째로

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>www.xxx.yyy.zzz</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.1</string>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

마지막으로 게으른 방법을 사용했습니다.

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

약간 안전하지 않을 수도 있지만 다른 해결책을 찾지 못했습니다.


왜로 NSAllowsArbitraryLoads설정되어 true있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

9

신속한 4 및 xocde 10에서 NSAllowsArbitraryLoads를 임의로드 허용으로 변경하십시오. 그래서 다음과 같이 보일 것입니다 :

<key>App Transport Security Settings</key>
<dict>
     <key>Allow Arbitrary Loads</key><true/>
</dict>

6

가는 방법에 대해 언급 할 가치가 있습니다 ...

Info.plist는 Main.storyboard 또는 viewController.swift 아래에있는 파일 중 하나입니다.

처음 클릭하면 일반적으로 테이블 형식이므로 파일을 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 열기'소스 코드를 클릭 한 다음 아래에 코드를 끝에 추가하십시오.

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

바로 위의 코드를 복사하여 붙여 넣기

 "</dict>
</plist>"

결국입니다.


왜로 NSAllowsArbitraryLoads설정되어 true있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

5

문제 27.10.15에 직면 한 Xcode 7.1 업데이트 :

Info.plist의 새로운 값은 "앱 전송 보안 설정"입니다. 거기에서이 사전은 다음을 포함해야합니다.

  • 임의의로드 허용 = 예
  • 예외 도메인 (http 도메인을 여기에 삽입하십시오)

4

WKWebView가 항상 흰색이고 아무것도로드하지 않는 이유를 찾으려고 여기에 온 사람들을 위해 (정확히 그리고 macOS 앱에서 WKWebView가 어떻게 작동하도록합니까? )

위의 모든 로켓 과학이 작동하지 않으면 샌드 박스 설정을 확인하십시오.

샌드 박스 설정]

스위프트와 코코아를 처음 접했지만 프로그래밍 경험이 많았 으므로이 솔루션을 찾는 데 약 20 시간이 걸렸습니다. 수십 명의 힙 스터 -iOS- 튜토리얼이나 사과 기조 연설은 없습니다.


세상에, 정말 고마워요! 당신은 나에게 같은 20 시간 검색을 저장했습니다!
Brecht Machiels

2
대상의 기능 섹션에 해당 섹션이 표시되지 않음 (Xcode 9.4.1)
shim

3

기본적으로 iOS는 HTTPS API 만 허용합니다. HTTP는 안전하지 않으므로 앱 전송 보안을 비활성화해야합니다. ATS를 비활성화하는 방법은 두 가지가 있습니다.

1. 프로젝트 info.plist에 소스 코드를 추가하고 루트 태그에 다음 코드를 추가하십시오.

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

2. 프로젝트 정보 사용하기.

왼쪽 창의 프로젝트에서 프로젝트를 클릭하고 프로젝트를 대상으로 선택한 다음 정보 탭을 선택하십시오. 다음 구조로 사전을 추가해야합니다.

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



1

NSExceptionDomains대상 사이트가 js외부 도메인에서 리소스 (예 : 파일)를 로드 할 수 있기 때문에을 (를) 동시에 사용 하면 효과가 적용되지 않을 수 있습니다 http. 이러한 외부 도메인을 추가하여 해결할 수 있습니다 NSExceptionDomains.

로드 할 수없는 리소스를 검사하려면 원격 디버깅을 사용하십시오. 튜토리얼은 다음과 같습니다. http://geeklearning.io/apache-cordova-and-remote-debugging-on-ios/


0

Cordova의 경우 ios.json에 추가하려면 다음을 수행하십시오.

"NSAppTransportSecurity": [
   {
      "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>"
   }
]

그리고 그것은 안에 있어야합니다 :

"*-Info.plist": {
   "parents": {
   }
}

config.xml의 <access origin = "*"/> 만 작동하지 않았습니다. 둘 다 필요한지 확실하지 않지만 ios.json 솔루션은 나를 위해 거래를 봉쇄했습니다.
zeusstl

왜로 NSAllowsArbitraryLoads설정되어 true있습니까? 당신은 ATS의 목적을 파괴합니다. 세계에서 가장 위험한 코드 : 브라우저 이외의 소프트웨어에서 SSL 인증서 유효성 검사를 참조하십시오 . 소프트웨어가 방금 목록을 만들었습니다.
jww

-1

많은 사람들이 언급했듯이 이것은 iOS 9.0과 함께 제공되는 기능 문제입니다. 그들은 App Transport Security라는 것을 추가했으며, 앱을 깨 뜨렸을 때 나도 화가났습니다.

.plist 파일의 NSAppTransportSecurity 사전에서 NSAllowsArbitraryLoads 키로 YES를 붕대로 묶을 수 있지만, 궁극적으로는 HTTPS : // 접두사를 구성하기 위해 URL을 구성하는 코드를 다시 작성해야합니다.

Apple은 iOS 9.0에서 NSUrlConnection 클래스를 다시 작성했습니다. NSURLConnection 에서 읽을 수 있습니다 .

그렇지 않으면 올바른 솔루션을 구현할 때까지 iOS 9.0을 종료해야 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.