Per quelli di voi che desiderano un contesto più ampio sul perché ciò accada, oltre a come risolverlo, leggete di seguito.
Con l'introduzione di iOS 9, per migliorare la sicurezza delle connessioni tra un'app e i servizi Web, le connessioni protette tra un'app e il suo servizio Web devono seguire le migliori pratiche . Il comportamento delle migliori pratiche viene applicato da App Transport Security per:
- prevenire la divulgazione accidentale e
- fornire un comportamento predefinito sicuro.
Come spiegato nel Technote di sicurezza del trasporto di app , quando si comunica con il proprio servizio Web, App Transport Security presenta ora i seguenti requisiti e comportamenti:
- Il server deve supportare almeno il protocollo TLS (Transport Layer Security) versione 1.2.
- I codici di connessione sono limitati a quelli che forniscono segretezza diretta (vedere l'elenco di codici qui sotto).
- I certificati devono essere firmati utilizzando un algoritmo di hash SHA256 o migliore della firma, con una chiave RSA a 2048 bit o superiore o una chiave a curva ellittica (ECC) a 256 bit o superiore.
- I certificati non validi provocano un errore grave e nessuna connessione.
In altre parole, la richiesta del servizio Web deve: a.) Utilizzare HTTPS e b.) Essere crittografata mediante TLS v1.2 con segretezza diretta.
Tuttavia, come menzionato in altri post, è possibile ignorare questo nuovo comportamento da App Transport Security specificando il dominio non sicuro nella Info.plistpropria app.
Per sovrascrivere, dovrai aggiungere le NSAppTransportSecurity> NSExceptionDomainsproprietà del dizionario al tuo Info.plist. Successivamente, aggiungerai il dominio del tuo servizio web al NSExceptionDomainsdizionario.
Ad esempio, se desidero ignorare il comportamento della sicurezza del trasporto app per un servizio Web sull'host www.yourwebservicehost.com , farei quanto segue:
Apri la tua app in Xcode.
Trova il Info.plistfile in Project Navigator e fai clic con il tasto destro del mouse su di esso e scegli l' opzione di menu Apri come > Codice sorgente . Il file dell'elenco delle proprietà verrà visualizzato nel riquadro destro.
Inserisci il seguente blocco di proprietà all'interno del dizionario delle proprietà principale (sotto il primo <dict>).
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>www.example.com</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.1</string>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
Se è necessario fornire eccezioni per domini aggiuntivi, aggiungerebbe un'altra proprietà del dizionario di seguito NSExceptionDomains.
Per saperne di più sui tasti citati sopra, leggi questo technote già menzionato .