2016-08-07 2 views
11

Я использую новый FireBase SDK, введенный в I/O 2016, и получаю эту ошибку после интеграции с моим приложением. Это происходит при запуске приложения.Ошибка FireBase -9806, ошибка SSL -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} 

ответ

4

Проблема с сетью. Иногда состояние сети происходит слишком медленно, и сеть отключается, и проверка SSL не может быть выполнена вовремя. Это также происходит чаще на iOS 9.x, что требует большей безопасности. Какую версию iOS и на каком устройстве вы ее запускали? Это все время начиналось?

+0

Я нахожусь на iOS 9.3, работая на симуляторе. Это происходит очень часто. Я просто интегрируюсь с FireBase, и я еще не развернул эту версию для производства. – ArdenDev

+0

Я пытался воспроизвести, и это произошло чаще всего, когда я был на очень плохой беспроводной связи [link] (https://www.dropboxforum.com/hc/en-us/community/posts/201866899-Dropbox-throwing- SSL-ошибка-для-некоторых пользователей). С хорошим Wi-Fi проблема редко случалась. Из моего исследования код -9806 означает, что что-то не так с соединением, и соединение было прервано, поэтому рукопожатие не будет завершено. Firebase Analytics снова попытается загрузить данные позже, поэтому я не думаю, что это проблема. – adbitx

+1

Есть ли сообщение об отладке, которое я могу включить, чтобы проследить эту проблему? Как я упоминал, эта проблема происходит очень часто, и я нахожусь в WIFI. – ArdenDev

1

Это связано с безопасностью транспорта приложений на iOS 9+. Apple наложила restrictions on SSL certificates, что не все серверы встречаются.

Если вам принадлежит сервер, генерирующий это сообщение, я бы посоветовал обновить более безопасный, современный сертификат SSL-сервера. Но поскольку это сервер Google/Firebase, все, что мы можем сделать, это отключить App Transport Security специально для этого домена.

Вот часть списка домен:

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

Вам нужно добавить этот домен в свой Info.plist файл следующим образом:

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

Имейте в виду, что позволяет небезопасные соединения от сторонний сервер потенциально представляет угрозу безопасности для вашего приложения. Однако, если вы не отправляете какие-либо конфиденциальные данные на сервер Google Analytics (которые вы не должны делать в любом случае), то экспозиция должна быть минимальной.

В соответствии с Apple's ATS documentation, включая любые исключения ATS, вы получите обзор при следующем отправке в App Store, чтобы вы могли подумать об этом.