我收到以下错误消息(每次尝试都相同)
2016-07-20 20:09:28.013 MyApp [1140:374263] CFNetwork SSLHandshake失败(-9806)2016-07-20 20:09:28.014 MyApp [1140:374263] NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL,-9806 )错误=可选(错误域= NSURLErrorDomain代码= -1200“发生SSL错误,无法建立与服务器的安全连接。” UserInfo = {_ kCFStreamErrorCodeKey = -9806,NSLocalizedRecoverySuggestion =您是否仍想连接到服务器?,NSUnderlyingError = 0x154dda750 {Error Domain = kCFErrorDomainCFNetwork Code = -1200“(null)” UserInfo = {_ kCFStreamPropertySSLClientCertificateState = 0,_kCFNetworkCFStreamSSLErrorOriginalValue = -9806,_kCFStreamErrorDomainKey = 3,_kCFStreamErrorCodeKey =本地化并已发生错误_}无法建立与服务器的安全连接。NSErrorFailingURLKey =https://example.com:8080/api/login,NSErrorFailingURLStringKey = https://example.com:8080/api/login,_kCFStreamErrorDomainKey = 3})
该证书是由letencrypt提供的经过验证的证书。我已经一遍又一遍地测试了我的Web服务器配置,并且一切似乎都应该如此。
运行该命令openssl s_client -connect example.com:8080/api/login -tls1_2
将给出所有预期的结果:
-验证授权为DST Root CA X3
,这已包含在Apple的根CA列表中
-返回的代码是 Verify return code: 0 (ok)
我还运行了一些ssl诊断工具网站,例如digicert,没有给出错误结果。
我可以从iOS设备上的Safari加载域,也可以从我的计算机加载chrome,而不必接受“不受信任的证书”。
有什么建议?
如果有人遇到相同的问题,请回答我自己的问题。在提出问题时,Let's Encrypt(使用的证书的CA)不支持其https证书(至少不是我得到的)的正向保密性。苹果默认情况下在当时使用的iOS版本中要求此设置(我相信大约是9.5,但在这里我可能会误会)。
为了解决前向保密的要求,可以在Info.plist中的域例外下指定它。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>example.com</key>
<dict>
<key>NSTemporaryExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>
沿着这条路的某个时候,他们将其更改为false的默认土地。我不确定这是什么时候,但是在iOS 10.0之后,这再也不是问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句