2016-02-03 15 views
5

Po włączeniu funkcji ATS w systemie iOS 9 wielu moich klientów nie jest w stanie spełnić wymogu poufności transakcji. Mogą jednak spełniać wymagania https i TLS 1.2. W związku z tym chciałbym złagodzić wymagania dotyczące poufności, utrzymując jednocześnie https i TLS 1.2.iOS 9 ATS - Wyłącz poufność przekazywania we wszystkich domenach

Zastanawiam się, czy ktoś ma wymyślony sposób na użycie NSExceptionRequiresForwardSecrecy lub NSThirdPartyExceptionRequiresForwardSecrecy w celu wyłączenia tajności przekazywania dla wszystkich domen.

Próbowałem użyć * dla NSExceptionDomains lub * .com, ale gdy użyłem tego linku problem nie działa. Kiedy używam domeny domain.com, zostanie załadowany link problemu. Patrzyłem na to na Apple Docs, ale nie widziałem żadnego sposobu na osiągnięcie mojego celu.

Czy można po prostu wyłączyć tajność przekazywania dla wszystkich domen, tak jak można całkowicie wyłączyć ATS, ustawiając NSAppTransportSecurity/NSAllowsArbitraryLoads na wartość true?

Dzięki!

+0

myślę, że to jest niemożliwe. Podaj wszystkie domeny swoich klientów w wyjątkach ATS lub zezwól na dowolne obciążenia. Możesz także zrobić oba, więc ATS będzie używało protokołu TLS 1.2 (ale bez poufności) dla znanych domen i wyłączone dla nieznanych. –

+0

Alex, doszedłem do tego samego wniosku, w końcu dodaliśmy obsługę wyjątków w domenie. –

Odpowiedz

5

Tak, jest to możliwe. Prawdopodobnie masz co najmniej jedną domenę, z którą na pewno będziesz się łączyć. Jeśli nie jest to prawdą, spróbuj użyć dowolnej wiarygodnej strony internetowej (google.com, facebook.com itp.). Należy dodać NSExceptionDomains regułę dla tej domeny, określając NSAppTransportSecurity konfigurację w następujący sposób:

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSExceptionDomains</key> 
     <dict> 
      <key>google.com</key> 
      <dict> 
       <key>NSIncludesSubdomains</key> 
       <true/>     
       <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
       <false/> 
      </dict> 
     </dict> 
    </dict> 

FYI, aplikacje facebook wykorzystują te same konfiguracje NSAppTransportSecurity.

+0

Udało mi się połączyć z moim serwerem internetowym za pomocą TLS 1.2 z ustawieniami wymienionymi powyżej, jednak podczas procesu autoryzacji bilet wygenerowany z serwera WWW jest znacznie krótszy niż serwer biletów wygenerowany dla mojej aplikacji Windows (ten bilet w systemie Windows działa), więc gdy dodaję kolejne połączenie do serwera z biletem, serwer nie może rozpoznać biletu. Co zrobiłem źle? – Aviva

1

Jest to możliwe, spróbuj.

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

Nawet można dodać specyficzny wyjątek,

<key>NSAppTransportSecurity</key> 
<dict> 
    <key>NSExceptionDomains</key> 
    <dict> 
     <key>testdomain.com</key> 
     <dict> 
      <key>NSIncludesSubdomains</key> 
      <false/> 
      <key>NSExceptionAllowInsecureHTTPSLoads</key> 
      <false/> 
      <key>NSExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSThirdPartyExceptionAllowInsecureHTTPSLoads</key> 
      <false/> 
      <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> 
      <true/> 
      <key>NSThirdPartyExceptionMinimumTLSVersion</key> 
      <string>TLSv1.2</string> 
      <key>NSRequiresCertificateTransparency</key> 
      <false/> 
     </dict> 

     ... 

    </dict> 
</dict> 
Powiązane problemy