2016-08-07 12 views
11

Ich verwende das neue FireBase-SDK, das auf I/O 2016 eingeführt wurde, und ich erhalte diesen Fehler nach der Integration mit meiner App. Dies geschieht beim Start der App.FireBase-Fehler -9806, SSL-Fehler -1200

2016-08-06 06:28:06.237 MyApp[49084:2511094] CFNetwork SSLHandshake failed (-9806) 
2016-08-06 06:28:06.238 MyApp[49084:2511094] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806) 
2016-08-06 06:28:06.453 MyApp[49084:2511094] CFNetwork SSLHandshake failed (-9806) 
2016-08-06 06:28:06.454 MyApp[49084:2511094] NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806) 

2016-08-06 06:28:06.854 MyApp[49084:2510825] <Firebase/Network/ERROR> Encounter network error. Error: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSUnderlyingError=0x7bf93200 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9806, _kCFStreamErrorCodeKey=-9806, _kCFStreamErrorDomainKey=3, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7bc97840>, kCFStreamPropertySSLPeerCertificates=<CFArray 0x7bcf2420 [0x477d1f8]>{type = immutable, count = 3, values = (
0 : <cert(0x7bc96990) s: *.googleapis.com i: Google Internet Authority G2> 
1 : <cert(0x7bc96fb0) s: Google Internet Authority G2 i: GeoTrust Global CA> 
2 : <cert(0x7bc97360) s: GeoTrust Global CA i: Equifax Secure Certificate Authority>)}}}, _kCFStreamErrorCodeKey=-9806, NSErrorFailingURLStringKey=https://play.googleapis.com/log, NSErrorPeerCertificateChainKey=<CFArray 0x7bcf2420 [0x477d1f8]>{type = immutable, count = 3, values = (
0 : <cert(0x7bc96990) s: *.googleapis.com i: Google Internet Authority G2> 
1 : <cert(0x7bc96fb0) s: Google Internet Authority G2 i: GeoTrust Global CA> 
2 : <cert(0x7bc97360) s: GeoTrust Global CA i: Equifax Secure Certificate Authority>)}, NSErrorClientCertificateStateKey=0, NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x7bc97840>, NSErrorFailingURLKey=https://play.googleapis.com/log} 

2016-08-06 06:28:06.856 MyApp[49084:] <FIRAnalytics/ERROR> Encounter network error. Error: Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." UserInfo={NSLocalizedDescription=An SSL error has occurred and a secure connection to the server cannot be made., NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, _kCFStreamErrorDomainKey=3, NSUnderlyingError=0x7b968c00 {Error Domain=kCFErrorDomainCFNetwork Code=-1200 "(null)" UserInfo={_kCFStreamPropertySSLClientCertificateState=0, _kCFNetworkCFStreamSSLErrorOriginalValue=-9806, _kCFStreamErrorCodeKey=-9806, _kCFStreamErrorDomainKey=3, kCFStreamPropertySSLPeerTrust=<SecTrustRef: 0x7b9abbb0>, kCFStreamPropertySSLPeerCertificates=<CFArray 0x7b8a2420 [0x477d1f8]>{type = immutable, count = 3, values = (
    0 : <cert(0x7b9aaf40) s: *.google-analytics.com i: Google Internet Authority G2> 
    1 : <cert(0x7b9ab280) s: Google Internet Authority G2 i: GeoTrust Global CA> 
    2 : <cert(0x7b9ab630) s: GeoTrust Global CA i: Equifax Secure Certificate Authority> 
)}}}, _kCFStreamErrorCodeKey=-9806, NSErrorFailingURLStringKey=https://app-measurement.com/config/app/1:926356559846:ios:74ac6682756d2bd6?app_instance_id=7590DD8CDAF44A3ABE3F39478A9EB2BE&platform=ios&gmp_version=3201, NSErrorPeerCertificateChainKey=<CFArray 0x7b8a2420 [0x477d1f8]>{type = immutable, count = 3, values = (
    0 : <cert(0x7b9aaf40) s: *.google-analytics.com i: Google Internet Authority G2> 
    1 : <cert(0x7b9ab280) s: Google Internet Authority G2 i: GeoTrust Global CA> 
    2 : <cert(0x7b9ab630) s: GeoTrust Global CA i: Equifax Secure Certificate Authority> 
)}, NSErrorClientCertificateStateKey=0, NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x7b9abbb0>, NSErrorFailingURLKey=https://app-measurement.com/config/app/1:926356559846:ios:74ac6682756d2bd6?app_instance_id=7590DD8CDAF44A3ABE3F39478A9EB2BE&platform=ios&gmp_version=3201} 

Antwort

4

Das Problem ist mit dem Netzwerk. Manchmal ist der Netzwerkzustand zu langsam, so dass das Netzwerk abbricht und die SSL-Prüfung nicht rechtzeitig erfolgen kann. Dies passiert auch öfter auf iOS 9.x, was eine bessere Sicherheit erfordert. Auf welcher iOS-Version und auf welchem ​​Gerät haben Sie es ausgeführt? Ist es beim Start immer passiert?

+0

Ich bin auf iOS 9.3 läuft auf dem Simulator. Es passiert sehr häufig. Ich arbeite nur mit FireBase zusammen und habe diese Version noch nicht für die Produktion bereitgestellt. – ArdenDev

+0

Ich habe versucht zu reproduzieren und es am häufigsten aufgetreten, wenn ich auf sehr schlechte drahtlose Verbindung war [Link] (https://www.dropboxforum.com/hc/en-us/community/posts/201866899-Dropbox-throwing- SSL-Fehler-für-einige-Benutzer). Mit gutem WLAN ist das Problem selten passiert. Nach meinen Recherchen bedeutet der Code -9806, dass etwas mit der Verbindung nicht stimmt und die Verbindung abgebrochen wurde, sodass der Handshake nicht abgeschlossen werden konnte. Firebase Analytics wird versuchen, die Daten später erneut hochzuladen, daher glaube ich nicht, dass dies ein Problem darstellt. – adbitx

+1

Gibt es eine Debugprotokollierung, die ich aktivieren kann, um dieses Problem zu verfolgen? Wie ich bereits erwähnt habe, passiert dieses Problem sehr häufig und ich bin auf WLAN – ArdenDev

1

Dies wird durch App Transport Security auf iOS 9+ verursacht. Apple auferlegt restrictions on SSL certificates, die nicht alle Server treffen.

Wenn Sie den Server besitzen, der diese Nachricht generiert, würde ich Ihnen empfehlen, auf ein sichereres, modernes SSL-Serverzertifikat zu aktualisieren. Da es sich jedoch um den Server von Google/Firebase handelt, können wir nur die App-Transportsicherheit für diese Domäne deaktivieren.

Hier ist die Auflistung der Teil der Domäne:

NSErrorFailingURLStringKey=https://app-measurement.com... 

Sie benötigen diese Domain zu Ihrem Info.plist Datei hinzufügen wie folgt:

<key>NSExceptionDomains</key> 
<dict> 
    <!-- Firebase/Google Analytics server - Disables App Transport Security for this specific domain --> 
    <key>app-measurement.com</key> 
    <dict> 
     <key>NSExceptionAllowsInsecureHTTPLoads</key> 
     <true/> 
    </dict> 
</dict> 

Beachten Sie, dass damit unsichere Verbindungen von a Der Drittanbieterserver führt möglicherweise eine Sicherheitslücke in Ihre App ein. Wenn Sie jedoch keine sensiblen Daten an den Analytics-Server senden (was Sie ohnehin nicht tun sollten), sollte die Exposition minimal sein.

Nach Apple's ATS documentation, einschließlich aller ATS-Ausnahmen wird eine Überprüfung auslösen, wenn Sie das nächste Mal an den App Store senden, also sollten Sie dies auch berücksichtigen.

Verwandte Themen