Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CFN网络SSLHandshake间歇性失败(-9806)_Ssl_Encryption_Ssl Certificate_Ios9_Tls1.2 - Fatal编程技术网

CFN网络SSLHandshake间歇性失败(-9806)

CFN网络SSLHandshake间歇性失败(-9806),ssl,encryption,ssl-certificate,ios9,tls1.2,Ssl,Encryption,Ssl Certificate,Ios9,Tls1.2,我使用的是iOS应用程序,在iOS 9中测试时出现以下错误 CFNetwork SSLHandshake failed (-9806) NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806) 我发现一些链接说这可能是由于NSAppTransportSecurity建议为我的域添加异常或禁用ATS。但是我的服务器确实支持TLS1.2,我只是间歇性地遇到这个问题。如果这是由于NST

我使用的是iOS应用程序,在iOS 9中测试时出现以下错误

CFNetwork SSLHandshake failed (-9806)    
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9806)    
我发现一些链接说这可能是由于NSAppTransportSecurity建议为我的域添加异常或禁用ATS。但是我的服务器确实支持TLS1.2,我只是间歇性地遇到这个问题。如果这是由于NSTransportSecurity造成的,我认为问题应该是一致的。 奇怪的是,这并不一致。该应用程序工作正常,在大多数情况下能够连接到服务器。但是过了一段时间,我得到了上面的错误。我使用NSURL连接。大多数应用程序交互就像点击一个按钮,它会向服务器(tomcat)进行网络调用。一旦出现SSL failed错误,让应用程序成功向服务器发送请求的唯一方法是关闭应用程序并重新启动。我曾尝试在问题发生期间将连接从wifi更改为3g,甚至在问题发生后重新启动服务器,但我没有找到任何运气。我可以很好地使用safari和其他应用程序。一段时间以来,我一直在努力寻找解决办法。服务器未启用前向保密

为了深入检查问题,我验证了来自客户端的SSL数据包。 当问题发生时,客户端发送的密码列表与连接正常时不同。

当连接工作正常时,我可以看到下面的密码列表正在发送

还可以看到,在问题期间,客户端hello数据包显示为SSL,其中当连接良好时,客户端hello数据包显示为TLS1.2

发行期间

没有问题的时候


我使用相同的NSurlconnetion类在整个应用程序中连接到服务器。我很困惑为什么会出现这样的差异,为什么会出现这样的差异,以及同一个曾经有效的服务器调用在以后如何不起作用。上述数据是否表明,在问题发生期间,客户端试图通过tls1.0或更低版本进行连接?服务器仅支持TLS 1.1和TLS 1.2。该问题仅在iOS 9中发现。非常感谢您的帮助。

该应用程序可能从TLS 1.2开始,a也将提供TLS 1.2中新增的密码(名称中带有GCM的密码)。然后我想可能是由于临时服务器问题、中间包(防火墙)或其他原因导致了握手问题。从那时起,应用程序假定TLS 1.2存在问题,并将尝试使用降级连接,即TLS 1.0。保持这种方式,因为“它知道”TLS1.2将无法工作


这种降级也经常出现在浏览器中,但通常只有在至少成功一次的情况下,浏览器才会记得进行降级。是否存在导致原始TLS 1.2失败和降级成功的SSL拦截中间件(防火墙)?也就是说,该问题是否只有在设备通过此中间盒连接一次,然后稍后尝试重新连接到您的站点后才会发生?

该应用程序可能会从TLS 1.2开始,并且a将提供TLS 1.2中新增的密码(名称中带有GCM的密码)。然后我想可能是由于临时服务器问题、中间包(防火墙)或其他原因导致了握手问题。从那时起,应用程序假定TLS 1.2存在问题,并将尝试使用降级连接,即TLS 1.0。保持这种方式,因为“它知道”TLS1.2将无法工作


这种降级也经常出现在浏览器中,但通常只有在至少成功一次的情况下,浏览器才会记得进行降级。是否存在导致原始TLS 1.2失败和降级成功的SSL拦截中间件(防火墙)?也就是说,问题是否只有在设备通过此中间盒连接一次,然后稍后尝试重新连接到您的站点后才会发生?

是否可以让iOS客户端在未打开ATS的情况下仅连接到TLS 1.2的web服务器?ATS是与TLS 1.2 web服务器对话的唯一方式吗?@Aviva:评论不用于提出新问题。请提出一个新问题,并提供有关您试图解决的问题的详细信息。对不起,Stackoverflow限制了我可以提出的新手问题的数量。@Aviva:据我所知,ATS仅将连接限制为仅使用安全设置。但这并不意味着像TLS 1.2这样的安全设置只能与ATS一起使用。但我没有特别使用iOS的经验,只是一般使用TLS堆栈。有关更多详细信息,请提出一个新问题。是否可以在未启用ATS的情况下,让iOS客户端仅使用TLS 1.2连接到web服务器?ATS是与TLS 1.2 web服务器对话的唯一方式吗?@Aviva:评论不用于提出新问题。请提出一个新问题,并提供有关您试图解决的问题的详细信息。对不起,Stackoverflow限制了我可以提出的新手问题的数量。@Aviva:据我所知,ATS仅将连接限制为仅使用安全设置。但这并不意味着像TLS 1.2这样的安全设置只能与ATS一起使用。但我没有特别使用iOS的经验,只是一般使用TLS堆栈。欲了解更多详情,请提出新问题。