2017-11-04 3 views
1

ATS에 문제가 있습니다. Xcode 9.1을 사용하고 있습니다. 개발 목표는 11.0입니다. 나는 반응 네이티브 0.49앱 전송 보안 블록 HTTPS

내 프로그램이 인증서 letsencrypt 유효한 (구글 크롬)를 가진 HTTPS (https://www.xxxx.com) 리소스를 가져올하고있다 사용하여 개발하고 있어요. 반입은 NSAllowsArbitraryLoads가 true로 설정된 경우에만 작동하며 false로 설정하면 반입이 차단됩니다 (디버그 아웃)?

임시 도메인 (https://xxxx.no-ip.org)을 사용하여 몇 가지 테스트를하고 있습니다. 이 도메인에는 유효한 암호화 인증서도 있습니다. 이 경우 모든 것이 잘 작동합니다.

두 호스트간에 유일한 차이점은 테스트 도메인은 단일 도메인 호스트이고 프로덕션 호스트는 다중 도메인 호스트입니다. 아무도 제안하지 않았습니까?

감사

해리


디버그 아웃 : CFNetwork에서 진단 [1 : 1,187] 12 : 38 : 08.258 { 되었습니까 페일 (NULL) 로더 { URL = https : // .... 오류 : 도메인 오류 = kCFErrorDomainCFNetwork 코드 = -1200 "(null)"UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0, _kCFNetworkCFStreamSSLErrorOriginalValue = -9802, _kCFStreamErrorDomainKey = 3, 인증서는 애플이 요구하는 TLS 버전의 모든 요구 사항에 적합하지 않기 때문에 _kCFStreamErrorCodeKey = -9802}

이 내 의 Info.plist입니다 섹션

<key>NSAppTransportSecurity</key> 
    <dict> 
    <key>NSAllowsArbitraryLoads</key> 
    <false/> 
    <key>NSExceptionDomains</key> 
    <dict> 
    <key>xxxx.no-ip.org</key> 
    <dict/> 
    <key>localhost</key> 
    <dict> 
    <key>NSExceptionAllowsInsecureHTTPLoads</key> 
    <true/> 
    </dict> 
    <key>xxxx.com</key> 
    <dict> 
    <key>NSIncludesSubdomains</key> 
    <true/> 
</dict> </dict> </dict> 
+0

('https : // www.xxxx.com')의 인증서가 유효하다는 것을 어떻게 알 수 있습니까? Letsencrypt는 * .example.com certs를 발행하지 않습니다 - xxxx.com뿐만 아니라 www.xxxx.com에 대한 귀하의 인증서입니까? –

+0

Chrome 및 Safari에서 URL을 열었습니다. –

답변

0

당신이 HTTPS를 통해 연결을 시도하는 경우 아무것도하지해야 NSExceptionAllowsInsecureHTTPLoads 사용. URL (https://www.xxxx.com)이 트래픽을 http://www.xxxx.com으로 리디렉션 할 수 있습니까?

HTTPS 트래픽에 영향을 미치는 다른 예외 (예 : 전달 보안, TLS 버전, 키 강도)가 HTTPS의 모든 요구 사항을 충족하지 못하게합니다. 당신이해야 할 일은 그것이 왜 실패하고 있는지 정확히 파악하는 것입니다.

ATS 규정을 준수하는지 확인하려면 Mac에서 nscurl --ats-diagnostics <url> 명령을 사용하십시오. ATS에 대한 자세한 내용은 위의 nscurl 명령의 결과를 사용/해석하는 방법도 있습니다 (this post).

또한, CFNETWORK_DIAGNOSTICS 레벨을 변경하여 실패 이유에 대한 자세한 정보를 얻을 수 있습니다. 자세한 내용은 here에서 확인할 수 있습니다.

+0

당신의 조언을위한 Thx! http로 리디렉션하지 않습니다. 하지만 차이점은 xxx.no-ip.org (잘 작동 함)는 http와 https를 통해 접근 할 수 있다는 것입니다. www.xxxx.com은 https를 통해서만 접근 할 수 있습니다. –

+0

Mac에서'nscurl' 명령을 실행 했습니까? – wottle

+0

많은 정보를 제공합니다. 나는 주말에 그것을 분석하고 비교할 것입니다 ... –

1

는 가끔 발생합니다.

봅니다 도메인 https://www.xxxx.com

<key>NSExceptionRequiresForwardSecrecy</key> 
<true/> 

이 추가 및 하위 도메인을 포함하는 것을 잊지 마세요 : 그건 당신이 최소한 무엇을 찾기 위해 시도 할 수 있습니다 다음 도움이되지 않는 경우

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

을 지원하려는 TLS 버전 :

<key>NSExceptionMinimumTLSVersion</key> 
<string>TLSv1.2</string> 

과거의 모든 작업을 수행하는 경우 작동하지이 추가 시도 :

<key>NSExceptionAllowsInsecureHTTPLoads</key> 
<true/> 
+0

Thx Gabox, 이미 이러한 매개 변수를 사용했습니다. 불행히도 성공하지 못했습니다. certificat는 상당히 새롭고 (RSA-Encryption이 포함 된 SHA-256) 실제 테스트 인증서 호스트와 같은 인증서입니다. Chrome과 Safari와 같은 모든 주요 브라우저는 별다른 어려움없이 인증서를 수락합니다. 이상한 점은 –

+0

입니다. 그렇다면 아무도 도메인에서 작동하지 않는다면 인증서가 Apple의 요구 사항에 맞지 않는다고 말할 수 있습니다. 도메인에서 공통적 인 'ForwardSecrecy'에 대한 예외가 필요한 상황을 보았습니다. – Gabox

+1

Safari는 ATS 요구 사항을 충족시키지 않아도 인증서를 수락합니다. 그렇지 않으면 인터넷의 절반이 Safari에서 작동을 멈 춥니 다. 밖에는 너무 많은 웹 사이트가있어 최소 ATS 요구 사항 (TLS 1.2 이상, 전달 비밀, 강력한 키)을 충족시키지 못합니다. – wottle