2015-10-09 12 views
5

Sto cercando di ottenere la mia app per connettersi a un server http al 152.111.198.244 tramite la sicurezza di trasporto di Apple. E niente di ciò che sto cercando funziona.NSAllowsArbitraryLoads non funziona per l'indirizzo IP

Aggiunta la chiave NSAllowsArbitraryLoads al file info.plist del mio progetto ancora non ha permesso la mia app per collegarsi a questo specifico indirizzo IP 152.111.198.244 Ho passato con il technote su Apple sicurezza dei trasporti. Ho installato OSX 10.11 per cercare di trovare ciò che impostazioni potrebbero funzionare per l'URL utilizzando

nscurl --ats-diagnostics http://152.111.198.244 

e

nscurl --ats-diagnostics http://152.111.198.244/publications/ 

nel terminale. Tutte le impostazioni che nscurl tenta falliscono. Ho esaminato domande simili NSAllowsArbitraryLoads not working e NSExceptionAllowsInsecureHTTPLoads not working for ip addresses e non ho trovato la soluzione. Ho anche guardato here e la chiave NSExceptionMinimumTLSVersion proposta non funziona.

Sto iniziando a pensare che potrebbe esserci un bug da qualche parte o qualcosa che mi è sfuggito. Gli indirizzi IP sono un problema con Apple Transport Security? Perché? C'è un modo per far funzionare un indirizzo IP attraverso ATS?

AGGIORNAMENTO: ho aggiunto l'indirizzo IP specifico che mi dà problemi. Spero che qualcuno possa replicare di cosa sto parlando.

UPDATE: l'ho registrato come un errore nel radar e ho ricevuto un messaggio che dice che è un duplicato. Nel frattempo, l'indirizzo IP menzionato in questa domanda ha un nome di dominio ora http://3d.media24.com/ ma sfortunatamente non ha risolto il problema.

AGGIORNAMENTO: Ho contrassegnato una risposta corretta. Sembra che Apple abbia risolto questo problema con XCode7.1 e che le chiavi di Apple Transport Security siano leggermente cambiate. Anche il sito in questione è stato aggiornato per le connessioni https.

+1

Non so esatto ma provo con l'aggiunta di nsexceptiondomains e in questo il tuo indirizzo IP quindi in questo set NSExceptionRequiresForwardSecrecy su NO, rimuovi la voce arbitraryloads in plist. –

+0

Buona idea. L'ho provato ora, non ha funzionato. –

risposta

1

sono stato in grado di accedere a tale URL, http://152.111.198.244, utilizzando 'Consenti carichi arbitrari' nella mia Info.plist in Xcode 7.1 e 9.1 Simulator:

  • App trasporto Impostazioni di sicurezza: Dizionario
    • Consenti Carichi arbitrarie: booleano = yes

Screenshot:

enter image description here

ho usato il seguente codice:

let url = NSURL(string: "http://152.111.198.244")! 
let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) -> Void in 
    print("response \(response!)") 
} 
task.resume() 

Ecco la risposta che ho ricevuto:

response <NSHTTPURLResponse: 0x7fe1a2421f80> { URL: http://152.111.198.244/auth/login } { status code: 200, headers { 
    "Cache-Control" = "no-cache"; 
    Connection = "Keep-Alive"; 
    "Content-Encoding" = gzip; 
    "Content-Length" = 1138; 
    "Content-Type" = "text/html; charset=UTF-8"; 
    Date = "Fri, 23 Oct 2015 09:33:59 GMT"; 
    "Keep-Alive" = "timeout=5, max=98"; 
    Server = "Apache/2.4.7 (Ubuntu)"; 
    "Set-Cookie" = "XSRF-TOKEN=eyJpdiI6IldBOWYxcDk3SEtMekJ3YTNSUm9mYUE9PSIsInZhbHVlIjoiTFBcL3RGWW10cjlONFFkeXY1ZDA4SWRkSURIYlFsOGE3QkFEV3hRNTVwRFJuWSt5SXN3OU55Sng4elduMHd1T1duV0VFQ1o4dDVjeDJTZGRFeXJxMjN3PT0iLCJtYWMiOiJiZjNmOTg0NTZmY2RkMGQzNmE2YWEyNjJiNzA1MDlmZjIwM2M3NWYyNjYwZjM5N2Q3ZTgxNjRjNzAzMGYzYmMzIn0%3D; expires=Fri, 23-Oct-2015 11:33:59 GMT; Max-Age=7200; path=/, laravel_session=eyJpdiI6InR5OSs3cmpObVRBbFhORnVJQjRvWFE9PSIsInZhbHVlIjoiSTJ2bk41RVVLZUR1a0xKbFwvalZXQWpsNEtWeHppUVpYVUlRM1ZjQXc5aDJxT1wvXC9uYkViaTQ0SCtGNTMrdmtiQXFOd0VJTFwvM0ZCbmFHZk5MWlwvZ3BBUT09IiwibWFjIjoiYjRmNzcxY2Q5NDFlZjYzZTI1YzU2YzI0YTkxM2M0NDg0MGY2YThiODIxOGZjOTgxYjNmM2FlZTkzZGMyZTdjOCJ9; expires=Fri, 23-Oct-2015 11:33:59 GMT; Max-Age=7200; path=/; httponly"; 
    Vary = "Accept-Encoding"; 
    "X-Powered-By" = "PHP/5.5.9-1ubuntu4.11"; 
} } 

Sono stato anche in grado di connettersi utilizzando il dominio di nome3d .media24.com ma non l'indirizzo numerico di 152.111.198.244 utilizzando domini di eccezione.

Screenshot:

enter image description here

I miei risultati sono in accordo con la definizione per i domini eccezione nel Apple Technote on App Transport Security:

Un dizionario di eccezioni per il dominio di nome. Il nome della chiave è il nome del dominio, ad esempio www.apple.com.

+1

NSAllowsArbitraryLoads: SÌ -> Penso che questa linea faccia il trucco, non i domini delle eccezioni. Se rimuovi NSAllowsArbitraryLoads, i domini delle eccezioni non funzioneranno. –

+0

Quando NSAllowsArbitraryLoads è impostato su YES, allora consentirà tutti i domini, non solo quelli menzionati nei domini di eccezione. Ho ragione? –

+1

@RamarajT: Sì, hai ragione. – Daniel

0

Alcuni campi utile possono essere aggiunti sotto App Trasporti Impostazioni di protezione:

NSIncludesSubdomains 

NSExceptionAllowInsecureHTTPLoads 

NSExceptionRequiresForwardSecrecy 

NSExceptionMinimumTLSVersion 

NSThirdPartyExceptionAllowsInsecureHTTPLoads 

NSThirdPartyExceptionMinimumTLSVersion 

NSThirdPartyExceptionRequiresForwardSecrecy 

Visita https://github.com/ChenYilong/iOS9AdaptationTips#1-demo1_ios9%E7%BD%91%E7%BB%9C%E9%80%82%E9%85%8D_ats%E6%94%B9%E7%94%A8%E6%9B%B4%E5%AE%89%E5%85%A8%E7%9A%84https per più utilizzo.

Sperare utile per voi!