FireBase错误-9806,SSL错误-1200

我正在使用2016年I / O上推出的新的FireBase SDK,并且在与我的应用程序集成后出现此错误。 这发生在应用程序启动。

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} 

问题在于networking。 有时networking状况太慢,networking超时,无法及时进行SSL检查。 这在iOS 9.x上也经常发生,这需要更好的安全性。 什么样的iOS版本,你运行在哪个设备上? 一开始是不是一直都在发生?

这是由iOS 9+上的应用程序传输安全性引起的。 苹果公司对并非所有服务器都符合的SSL证书施加限制 。

如果您拥有生成此消息的服务器,则build议将其更新为更安全的现代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服务器发送任何敏感数据(您不应该这样做),那么曝光率应该是最小的。

根据苹果公司的ATS文件 ,包括任何ATSexception在下次提交给App Store时都会触发审查,所以您可能也要考虑这一点。