无法使用HTTPS连接到服务器

时间:2016-06-16 07:41:50

标签: ios ssl nsurlsession app-transport-security

首先,我知道有类似问题的 ton ,但我所看到的似乎都没有解决我的设置问题(我找不到任何解决方案) )。所以忍受我...

  • 我的服务器主机名是IP地址,而不是域名 (即,URL看起来像:https://XXX.YYY.ZZZ.WWW:9443/etc...)。
  • 我的服务器有真实证书(即自签名)。
  • 我的应用程序的plist条目NSAppTransportSecurity字典为空(无例外 - 出厂设置ATS)。
  • 这是生产代码,我可以禁用ATS(我认为我也不能,因为例外只适用于显式域名,不是 IP地址)。

(在iOS 9上测试,部署目标是iOS 8.x)

我尝试连接时遇到此错误:

  

CFNetwork SSLHandshake失败(-9806)NSURLSession / NSURLConnection   HTTP加载失败(kCFStreamErrorDomainSSL,-9806)   错误:发生SSL错误,无法与服务器建立安全连接。

(设备模拟器)

我尝试使用here描述的命令行工具nscurl。我明白了:

  • 默认ATS安全连接:CFNetwork SSLHandshake失败( -9806
  • 允许任意加载: NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL, -9813 (“此服务器的证书无效。您可能正在连接假装是“XXX.YYY.ZZZ.WWW”的服务器可能会使您的机密信息面临风险。“)
  • 为XXX.YYY.ZZZ.WWW配置TLS例外:(TLS 1.2,1.1和1.0)CFNetwork SSLHandshake失败( -9806

  • 禁用完美转发保密: CFNetwork SSLHandshake失败( -9801

  • 禁用完美转发保密并允许不安全的HTTP: CFNetwork SSLHandshake失败( -9801

  • 禁用PFS的TLSv1.2: CFNetwork SSLHandshake失败( -9801

  • 禁用PFS的TLSv1.1 :CFNetwork SSLHandshake失败( -9801

  • 禁用PFS的TLSv1.0: NSURLSession / NSURLConnection HTTP加载失败(kCFStreamErrorDomainSSL, -9802

  • 禁用PFS且允许不安全HTTP的TLSv1.2: CFNetwork SSLHandshake失败( -9801

......你得到了演练。

我已经检查了服务器支持的 TLS版本(就我所研究而言,这是最大的嫌疑人),但也许还有其他我需要修复/检查的内容客户方?

1 个答案:

答案 0 :(得分:2)

我认为您需要检查服务器上的证书。您应该能够使用openssl客户端调查您的证书并获取服务器的ssl配置:

openssl s_client  -connect XXX.YYY.ZZZ.WWW:9443 

您应该获得有关证书的一些详细信息

SSL会话:     协议:TLSv1     密码:AES256-SHA     会话ID://     会话ID-CTX:     主密钥: //     Key-Arg:无     开始时间:1449693038     超时:300(秒)     验证返回码:0(ok)

或者,您可以使用symantec之类的网站查询证书,看看您是否符合TLS1.2的要求,足够强的密钥和前向保密。

此外,您可以尝试启用CFNetwork诊断日志记录。编辑Xcode方案并添加CFNETWORK_DIAGNOSTICS环境变量。将日志记录级别设置为3,这是最详细的:

Xcode控制台显示日志文件的位置:

CFNetwork diagnostics log file created at: /private/var/mobile/Containers/
Data/Application/A3421F00-451A-CD70-1B82-B163D1A3BB0F/Library/Logs/
CrashReporter/CFNetwork_com.sample.app_118.nwlrb.log

您可以查看这些日志,看看是否有关于网络呼叫失败原因的更多信息。