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.plist
propria app.
Per sovrascrivere, dovrai aggiungere le NSAppTransportSecurity
> NSExceptionDomains
proprietà del dizionario al tuo Info.plist
. Successivamente, aggiungerai il dominio del tuo servizio web al NSExceptionDomains
dizionario.
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.plist
file 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 .