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.
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>
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>
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)
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>
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. : \
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.
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 .
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
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.