iOS9 krijgt foutmelding “Er is een SSL-fout opgetreden en er kan geen beveiligde verbinding met de server tot stand worden gebracht”

Sinds ik mijn bestaande project heb geüpgraded met iOS 9, krijg ik steeds de foutmelding:

Er is een SSL-fout opgetreden en er kan geen beveiligde verbinding met de server worden gemaakt.


Antwoord 1, autoriteit 100%

Voor de iOS9 nam Apple een radicale beslissing met iOS 9, waarbij al het onbeveiligde HTTP-verkeer van iOS-apps werd uitgeschakeld, als onderdeel van App Transport Security (ATS).

Om ATS eenvoudig uit te schakelen, kunt u deze stappen volgen door Info.plistte openen en de volgende regels toe te voegen:

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

Antwoord 2, autoriteit 54%

Hoewel het toestaan ​​van willekeurige ladingen (NSAllowsArbitraryLoads = true) een goede oplossing is, moet u ATS niet volledig uitschakelen, maar eerder de HTTP-verbinding inschakelen die u wilt toestaan:

<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>

Antwoord 3, autoriteit 12%

Als u zich alleen op specifieke domeinen richt, kunt u proberen dit toe te voegen aan de Info.plist van uw toepassing:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>example.com</key>
        <dict>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

Antwoord 4, autoriteit 11%

iOS 9 dwingt verbindingen die HTTPS gebruiken om TLS 1.2 te zijn om recente kwetsbaarheden te voorkomen. In iOS 8 werden zelfs onversleutelde HTTP-verbindingen ondersteund, zodat ook oudere versies van TLS geen problemen gaven. Als tijdelijke oplossing kunt u dit codefragment aan uw Info.plist toevoegen:

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

*verwezen naar App Transport Security (ATS)

voer hier de afbeeldingsbeschrijving in


Antwoord 5, autoriteit 4%

Het lijkt erop dat iOS 9.0.2 verzoeken afbreekt naar geldige HTTPS-eindpunten. Mijn huidige vermoeden is dat het SHA-256-certificaten vereist of dat het mislukt met deze fout.

Inspecteer uw UIWebView met safari om te reproduceren en probeer naar een willekeurig HTTPS-eindpunt te navigeren:

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)

Probeer nu eens te gaan googlen (want ze hebben natuurlijk een SHA-256-certificaat):

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

Het toevoegen van een uitzondering op de transportbeveiliging (zoals uiteengezet in het antwoord van @stéphane-bruckert hierboven) lost dit op. Ik ga er ook van uit dat het volledig uitschakelen van NSAppTransportSecurityook zou werken, hoewel ik heb gelezen dat het volledig uitschakelen ervan je app-beoordeling in gevaar kan brengen.

[EDIT] Ik heb ontdekt dat het eenvoudig opsommen van de domeinen waarmee ik verbinding maak in het NSExceptionDomainsdict dit probleem oplost, zelfs als NSExceptionAllowsInsecureHTTPLoadsop true staat. :\


Antwoord 6

Het probleem is het ssl-certificaat aan de serverzijde. Er is iets dat interfereert of het certificaat komt niet overeen met de service. Bijvoorbeeld wanneer een site een ssl-certificaat heeft voor www.mijndomein.com terwijl de service die u gebruikt op mijnservice.mijndomein.com draait. Dat is een andere machine.


Antwoord 7

Ik krijg dezelfde foutmelding als ik mijn HTTPS-URL opgeef als: https://www.mywebsite.com. Het werkt echter prima als ik het specificeer zonder de drie W’s als: https://mywebsite.com.


Antwoord 8

In mijn geval kwam ik dit probleem tegen in mijn simulator omdat de datum van mijn computer achter lag op de huidige datum. Controleer dit geval dus ook als u te maken krijgt met een SSL-fout.


Antwoord 9

Ik kreeg onderstaande foutmelding bij het afspelen

finished with error [-1200] Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSErrorFailingURLStringKey=https://remote-abcabc-svc.an.abc.com:1935/abr/_definst_/smil:v2/video/492F2F82592F59EA74ABAA6B9D6E6F42/F6B1BD452132329FBACD32730862CAE0/091EAD80FE9BEDD52A2F33840CA3CBAC.v3.eng.smil/playlist.m3u8, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>.<1>, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <692A1174-DA1C-4267-9560-9020A79F8458>

Ik heb ervoor gezorgd dat ik invoer in uitzonderingsdomeinen in het plist-bestand heb toegevoegd en NSAllowsArbitraryLoads is ingesteld op true en toch kreeg ik een fout te zien.

Toen realiseerde ik me dat ik URL speel met https en niet met http.

Ik heb de video-URL ingesteld op http en het probleem is opgelost.


Antwoord 10

Xcode-project -> ga naar info.plist en klik op de knop + en vervolgens Toevoegen (beveiligingsinstellingen voor app-transport) Uitvouwen, willekeurige ladingen toestaan ​​Instellen JA. Bedankt


Antwoord 11

Mijn probleem was NSURLConnectionen dat was verouderd in iOS9, dus ik heb de hele API gewijzigd in NSURLSessionen dat loste mijn probleem op.

NSURLConnection verouderd in iOS9


Antwoord 12

Ik kreeg deze foutmelding voor sommige netwerkoproepen en niet voor andere. Ik was verbonden met een openbare wifi. Die gratis wifi leek te knoeien met bepaalde URL’s en vandaar de fout.

Toen ik verbinding maakte met LTE, verdween die fout!


Antwoord 13

Met behulp van deze site heb ik het adres ingevoerd van de server waarop ik het verzoek heb gedaan en de gegenereerde SHA-sleutel toegevoegd aan de info.plist.

https://www.ssllabs.com/ssltest/index.html

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSPinnedDomains</key>
        <dict>
            <key>Your domain here (www.api.com)</key>
            <dict>
                <key>NSPinnedLeafIdentities</key>
                <array>
                    <dict>
                        <key>SPKI-SHA256-BASE64</key>
                        <string>******pfbtB5iNouq********rC8Nrb+AmLFKxV7qgM=</string>
                    </dict>
                </array>
            </dict>
        </dict>
    </dict>

Other episodes