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

iOS 9로 기존 프로젝트를 업그레이드했기 때문에 계속 오류가 발생합니다.

SSL 오류가 발생하여 서버에 안전하게 연결할 수 없습니다.



답변

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

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

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


답변

임의로드 ( 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>


답변

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) 참조

여기에 이미지 설명 입력


답변

특정 도메인을 대상으로하는 경우 응용 프로그램의 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>


답변

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된다는 사실을 발견했습니다. : \


답변

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


답변

HTTPS URL을 https://www.mywebsite.com 으로 지정하면 동일한 오류가 발생 합니다. 그러나 https://mywebsite.com 과 같이 세 개의 W없이 지정하면 제대로 작동합니다 .