iOS9에서 "SSL 오류가 발생했으며 서버에 대한 보안 연결을 설정할 수 없습니다"오류가 발생합니다.


답변:


123

iOS9의 경우 Apple은 App Transport Security (ATS) 의 일환으로 iOS 앱의 모든 보안되지 않은 HTTP 트래픽을 비활성화하는 iOS 9로 급진적 인 결정을 내 렸습니다 .

ATS를 비활성화하려면 Info.plist 를 열고 다음 줄을 추가 하여이 단계를 수행 할 수 있습니다 .

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

46
plist에 위의 줄을 추가했지만 여전히 다음 오류가 발생합니다. SSL 오류가 발생했으며 서버에 대한 보안 연결을 만들 수 없습니다. NSLocalizedRecoverySuggestion = 그래도 서버에 연결 하시겠습니까?, _kCFNetworkCFStreamSSLErrorOriginalValue = -9819 HTTPS 요청을 호출하고 있습니다. HTTPS에 대한 다른 옵션이 있습니까?
AiOsN 2015 년

1
AiOsN = 여기에서 동일한 문제, 해결책을 찾았습니까?
Franck

5
NSAllowsArbitraryLoads가 ATS를 활성화 또는 비활성화하는 스위치라는 것은 일반적인 오해 인 것 같습니다. https : // 요청을 수행하는 즉시 ATS 요구 사항을 충족하는지 확인해야합니다. 서버에 설치된 유효한 인증서 (와일드 카드없이 서버의 도메인 이름과 정확히 일치), 서버는 전달을 사용하여 TLS 1.2를 지원합니다. 비밀.
Christian

@Christian 이러한 ATS 요구 사항의 출처는 무엇입니까? 와일드 카드 인증서를 지원하지 않는 것에 대해 아무것도 찾을 수 없습니다.
Bart

@Bartosz 죄송합니다. 공식 문서를 가리킬 수 없습니다. 서버 인프라를 업데이트 할 때 관찰 한 것입니다.
기독교

64

임의로드 ( NSAllowsArbitraryLoads = true)를 허용 하는 것이 좋은 해결 방법이지만 ATS를 완전히 비활성화하는 것이 아니라 허용하려는 HTTP 연결을 활성화해야합니다.

<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>

2
모든 보안 문제를 무시하는 것보다 훨씬 낫습니다. Amazon의 S3 서비스는 약한 암호화를 사용하고 서버에 직접로드하면 문제가 발생했지만 이로 인해 s3.amazonaws.com URL 만 열어 나머지는 인라인으로 유지할 수있었습니다. 대박!
mix3d

3
내가 연결하려는 서버는 TLSv1.0을 사용하고있었습니다. SLL 오류를 우회하기 위해 tls1.0에 대한 NSExceptionMinimumTLSVersion을 추가해야했습니다
Ispas Claudiu

이 대답은 저에게 효과적이었습니다. WKWebView를 사용하고 API 서버에 SSL 요청을 시도했습니다.
Fan Jin

안녕하세요 @ Stéphane, 이상한 상황이 발생했습니다. 내 휴대 전화에 iOS 버전 12.1.2가 설치되어 있지만 "SSL 오류가 발생하여 서버에 보안 연결을 할 수 없습니다"라는 오류가 발생합니다. 내가 한 일은 plist 파일을 업데이트 한 것입니다. 앱이 잘 실행되고 다시 info.plist에서 변경 한 내용을 제거했습니다. 이제 잘 돌아가고 있습니다. 따라서이 오류의 실제 원인을 찾을 수 없습니다. 어떠한 제안?
Mansuu ....

@Mansuu .... 위의 의견에서 제안한대로 TLSv1.0을 사용하려고 했습니까?
Stéphane Bruckert

15

iOS 9에서는 HTTPS를 사용하는 연결을 TLS 1.2로 설정하여 최근의 취약점을 방지합니다. iOS 8에서는 암호화되지 않은 HTTP 연결도 지원되었으므로 이전 버전의 TLS도 문제를 일으키지 않았습니다. 해결 방법으로 다음 코드 조각을 Info.plist에 추가 할 수 있습니다.

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

* ATS (App Transport Security) 참조

여기에 이미지 설명 입력


1
Swift 4+의 경우 앱 전송 보안 설정-> 임의로드 허용 = 예
mehdigriche

14

특정 도메인을 대상으로하는 경우 응용 프로그램의 Info.plist에 다음을 추가 할 수 있습니다.

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

이것은 나를 위해 작동하지 않았습니다. 예, "example.com"에 올바른 도메인을 입력했습니다.
Alyoshak

1
그것은 나를위한 일입니다. "임의로드 허용"으로 만 예제를 수행했을 때 작동하지만 중지 된 후에. "NSExceptionRequiresForwardSecrecy"-> false 및 "NSIncludesSubdomains"-> true 키를 사용하면 완벽하게 작동합니다. 감사합니다!
linhadiretalipe

1
이것은 나에게도 효과적이었습니다! https 연결을 사용하고 있지만 여전히 문제에 직면했습니다. 현재 'NSExceptionRequiresForwardSecrecy'에 대한 지원이 없습니다. 내가 읽은 내용에서 이것은 이전에 지정할 필요가 없었지만 지금도 필수로 만든 것처럼 보입니다. PS : 나는 아이폰 OS 10.2.1와 노력했다
하기 Vaibhav Misra는

6

iOS 9.0.2가 유효한 HTTPS 엔드 포인트에 대한 요청을 중단하는 것으로 보입니다. 내 현재 의심은 SHA-256 인증서가 필요 하거나이 오류로 실패한다는 것입니다.

재현하려면 safari로 UIWebView를 검사하고 임의의 HTTPS 끝점으로 이동해보십시오.

location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)

이제 Google로 이동하십시오 (물론 SHA-256 인증서가 있기 때문입니다).

location.href = "https://google.com"
// no problemo

전송 보안에 예외를 추가하면 (위의 @ stéphane-bruckert의 답변에 설명 된대로)이 문제를 해결할 수 있습니다. 또한 NSAppTransportSecurity완전히 비활성화하면 앱 리뷰가 위태로울 수 있다는 것을 읽었지만 완전히 비활성화해도 작동 한다고 가정합니다 .

[편집] 내가 연결하고있는 도메인을 NSExceptionDomainsdict 에서 열거하는 것만 으로도이 문제가 해결 NSExceptionAllowsInsecureHTTPLoads된다는 사실을 발견했습니다. : \


2

문제는 서버 측의 SSL 인증서입니다. 간섭이 있거나 인증서가 서비스와 일치하지 않습니다. 예를 들어 사이트에 www.mydomain.com에 대한 SSL 인증서가 있고 사용하는 서비스가 myservice.mydomain.com에서 실행되는 경우입니다. 그것은 다른 기계입니다.


나는 동일한 IP 주소 (도메인 및 서버)에서 다른 일부 URL과 함께 문제를 gettng하지만 아니에요
user6631314


0

Xcode 프로젝트-> info.plist로 이동하고 + 버튼을 클릭 한 다음 (앱 전송 보안 설정) 추가를 클릭하고 확장, 임의로드 허용을 YES로 설정합니다. 감사


@AbdulYasin은 plist를 확인하고 날씨 변화가 업데이트되었는지 확인합니까?
Shanmugasundharam

1
이 "느긋한"대답은이 ​​해결 방법과 관련된 설명 및 보안 위험을 완전히 생략합니다.
Manuel


0

제 경우에는 컴퓨터의 날짜가 현재 날짜보다 늦기 때문에 시뮬레이터에서이 문제에 직면했습니다. 따라서 SSL 오류에 직면했을 때도이 경우를 확인하십시오.


0

재생시 오류가 발생했습니다.

finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://remote-abcabc-svc.an.abc.com:1935/abr/_definst_/smil:v2/video/492F2F82592F59EA74ABAA6B9D6E6F42/F6B1BD452132329FBACD32730862CAE0/091EAD80FE9BEDD52A2F33840CA3CBAC.v3.eng.smil/playlist.m3u8, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>

plist 파일의 예외 도메인에 항목을 추가하고 NSAllowsArbitraryLoads가 true로 설정되어 있고 여전히 오류가 표시되는지 확인했습니다.

그런 다음 http가 아닌 https로 URL을 재생하고 있음을 깨달았습니다.

비디오 URL을 http로 설정하고 문제가 해결되었습니다.


0

일부 네트워크 호출에 대해이 오류가 발생하고 다른 호출이 발생하지 않았습니다. 공용 Wi-Fi에 연결되었습니다. 그 무료 Wi-Fi는 특정 URL을 조작하는 것처럼 보였으므로 오류가 발생했습니다.

LTE에 연결하면 오류가 사라졌습니다!

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