xCode: come risolvere “Transport security has blocked a cleartext HTTP” in maniera definitiva



Xcode

Se stai usando Xcode 8.0+ e Swift 2.2+ o in ogni caso Objective C:

Enter image description here

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

 

Dovete impostare la chiave NSAllowsArbitraryLoads su YES sotto il dizionario NSAppTransportSecurity nel vostro file info.plist.
Plist configuration

per coloro che vogliono un contesto più ampio sul perché questo sta accadendo, oltre a come risolverlo, leggete qui di seguito.

Con l’introduzione di iOS 9, per migliorare la sicurezza delle connessioni tra un’applicazione e i servizi web, le connessioni sicure tra un’applicazione e il suo servizio web devono seguire le migliori pratiche. Il comportamento delle best practice viene fatto rispettare dall’App Transport Security :

prevenire la divulgazione accidentale, e fornire un comportamento predefinito che sia sicuro.
Come spiegato nell’App Transport Security Technote, quando si comunica con il proprio servizio web, App Transport Security ha ora i seguenti requisiti e comportamenti:

  • Il server deve supportare almeno il protocollo Transport Layer Security (TLS) versione 1.2.
  • I cifrari di connessione sono limitati a quelli che forniscono la segretezza in avanti (vedi l’elenco dei cifrari qui sotto).
  • I certificati devono essere firmati utilizzando un algoritmo di hash della firma SHA256 o migliore, con una chiave RSA a 2048 bit o maggiore o una chiave ECC (Elliptic-Curve) a 256 bit o maggiore.
  • I certificati non validi comportano un guasto grave e nessuna connessione.
  • In altre parole, la vostra richiesta di servizio web dovrebbe: a.) utilizzare HTTPS e b.) essere criptata utilizzando TLS v1.2 con segretezza in avanti.

Tuttavia, come è stato menzionato in altri post, è possibile sovrascrivere questo nuovo comportamento da App Transport Security specificando il dominio insicuro nell’Info.plist della vostra app.


Per annullare, è necessario aggiungere le proprietà del dizionario NSAppTransportSecurity > NSExceptionDomains al vostro Info.plist. Successivamente, aggiungerete il dominio del vostro servizio web al dizionario NSExceptionDomains.

Per esempio, se voglio aggirare il comportamento di App Transport Security per un servizio web sull’host www.yourwebservicehost.com, allora farei quanto segue:

Aprite la vostra app in Xcode.

Trovare il file Info.plist in Project Navigator e cliccare con il “tasto destro del mouse” e scegliere l’opzione di menu Apri come > Codice sorgente. Il file della lista delle proprietà apparirà nel riquadro di destra.

Mettete il seguente blocco di proprietà all’interno del dizionario delle proprietà principali (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 altri domini, si aggiunge un’altra proprietà del dizionario sotto NSExceptionDomains.


Per ulteriori informazioni visita il sito: immagi.net