본문 바로가기

Mac&iOS

CFNetwork SSLHandshake failed (-9824)

Mac OS 10.11 오면서 한번 했던 삽질인데, 따로 어딘가에 기록하지 않아서 다른 프로젝트 하면서 또 시간낭비 했다.



NSError* error = nil; 

NSURL* requestURL = nil;

requestURL = [NSURL URLWithString:@"https://mytesturl.jsp"]; // todo : 확인할 URL 정보를 입력한다.

NSXMLDocument* xmlDoc = [[NSXMLDocument alloc] initWithContentsOfURL:requestURL options:NSXMLDocumentTidyXML error:&error];

NSLog(@"xmlDoc(%@)", xmlDoc);


위의 예제에서 테스트 URL(https://mytesturl.jsp)은 각자 테스트할 서버의 URL을 입력하면 된다.

10.10 까지는 아무런 문제가 없던 소스가 다음과 같은 에러를 뱉는다.



2016-06-07 12:03:59.085 test[796:18595] CFNetwork SSLHandshake failed (-9824)

2016-06-07 12:03:59.086 test[796:18595] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9824)


원인은 10.11 부터 Info.plist에 예외 도메인으로 지정하지 않은 모든 host에 대해서 TLSv1.2 SSL로 요청하게 됩니다. 

예외를 요청하려면 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 insecure HTTP requests-->

      <key>NSExceptionAllowsInsecureHTTPLoads</key>

      <true/>

      <!--Include to specify minimum TLS version-->

      <key>NSExceptionMinimumTLSVersion</key>

      <string>TLSv1.1</string>

    </dict>

  </dict>

</dict>


다음을 추가하면 된다.


<key>NSAppTransportSecurity</key>

<dict>

<key>NSAllowsArbitraryLoads</key>

<true/>

</dict>



출처 : http://stackoverflow.com/questions/30720813/cfnetwork-sslhandshake-failed-ios-9