iOS9 getting error "une erreur ssl s'est produite et une connexion sécurisée au serveur ne peut pas être établie"

depuis que j'ai mis à niveau mon projet existant avec iOS 9, je continue d'obtenir l'erreur:

une erreur SSL s'est produite et une connexion sécurisée au serveur ne peut pas être établie.

89
demandé sur Josh Caswell 2015-09-24 10:26:47

9 réponses

pour le iOS9, Apple a pris une décision radicale avec iOS 9, désactivant tout trafic HTTP non sécurisé à partir des applications iOS, dans le cadre de App Transport Security (ATS) .

pour désactiver simplement ATS, vous pouvez suivre cette procédure en ouvrant Info.plist , et ajouter les lignes suivantes:

<key>NSAppTransportSecurity</key>
  <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
  </dict>
99
répondu Tony Tran 2017-07-25 07:53:24

même si autoriser des charges arbitraires ( NSAllowsArbitraryLoads = true ) est une bonne solution, vous ne devriez pas désactiver entièrement ATS mais plutôt activer la connexion HTTP que vous voulez autoriser:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSExceptionDomains</key>
  <dict>
    <key>yourserver.com</key>
    <dict>
      <!--Include to allow subdomains-->
      <key>NSIncludesSubdomains</key>
      <true/>
      <!--Include to allow HTTP requests-->
      <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
      <true/>
      <!--Include to specify minimum TLS version-->
      <key>NSTemporaryExceptionMinimumTLSVersion</key>
      <string>TLSv1.1</string>
    </dict>
  </dict>
</dict>
46
répondu Stéphane Bruckert 2015-09-29 22:15:44

iOS 9 force les connexions qui utilisent HTTPS à être TLS 1.2 Pour éviter les vulnérabilités récentes. Dans iOS 8, même les connexions HTTP non cryptées étaient supportées, de sorte que les anciennes versions de TLS ne posaient pas de problèmes non plus. Comme solution de contournement, vous pouvez ajouter ce code snippet à vos informations.plist:

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

* référence à App Transport Security (ATS)

enter image description here

15
répondu TechSeeko 2015-10-01 08:00:35

si vous ne ciblez que des domaines spécifiques, vous pouvez essayer d'ajouter ceci dans les informations de votre application.plist:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>
12
répondu Nathan Noble 2016-02-19 15:30:24

Il semble que iOS 9.0.2 sauts de demandes valides terminaison HTTPS. Je soupçonne actuellement QU'elle nécessite des certs SHA-256 ou qu'elle échoue avec cette erreur.

pour reproduire, inspecter votre UIWebView avec safari, et essayer de naviguer sur un terminal HTTPS arbitraire:

location.href = "https://d37gvrvc0wt4s1.cloudfront.net/js/v1.4/rollbar.min.js"
// [Error] Failed to load resource: An SSL error has occurred and a secure connection to the server cannot be made. (rollbar.min.js, line 0)

essayez maintenant d'aller sur google (parce que bien sûr ils ont un SHA-256 cert):

location.href = "https://google.com"
// no problemo

ajoutant une exception à la sûreté des transports (sous la forme souligné par la réponse de @stéphane-bruckert ci-dessus) travaille à corriger cela. Je suppose aussi que la désactivation complète de NSAppTransportSecurity fonctionnerait aussi, bien que j'ai lu que la désactivation complète pourrait compromettre votre revue d'application.

[EDIT] j'ai trouvé qu'en énumérant simplement les domaines auxquels je me connecte dans le NSExceptionDomains dict corrige ce problème, même en laissant NSExceptionAllowsInsecureHTTPLoads mis à true. : \

5
répondu steve 2015-10-05 19:10:26

le problème est le certificat ssl côté serveur. Soit quelque chose interfère ou le certificat ne correspond pas au service. Par exemple, lorsqu'un site a un certificat ssl www.mydomain.com alors que le service que vous utilisez fonctionne sur myservice.mydomain.com. C'est une machine différente.

2
répondu Helge Becker 2015-10-01 11:37:28

j'obtiens la même erreur quand je spécifie mon URL HTTPS comme: https://www.mywebsite.com . Cependant il fonctionne très bien quand je le spécifie sans les trois W comme: https://mywebsite.com .

2
répondu Hashim Akhtar 2016-03-10 20:13:40

Xcode project - > goto info.plist et Cliquez sur le Bouton + puis Ajouter (App Transport Paramètres de Sécurité)de Développer, de Permettre à l'Arbitraire des Charges Défini sur YES. Merci

1
répondu Shanmugasundharam selvadurai 2016-10-24 09:42:01

mon problème était NSURLConnection et cela a été déprécié dans iOS9 donc j'ai changé toute L'API à NSURLSession et cela a corrigé mon problème.

Nslconnection dépréciée en iOS9

0
répondu Akila Wasala 2018-05-09 06:37:34