iOS 8.4 CFNetwork SSLHandshake失败(-9850)

我的ssl握手代码失败了,因为我更新了xcode到6.4(和模拟器到ios 8.4)。
错误是:CFNetwork SSLHandshake失败(-9850)

相同的代码是在ios 8.3模拟器上成功执行ssl握手(我也试过xcode 6.4的ios 8.3模拟器,握手很好)。

这是一些协调和开始握手的代码。 我正在使用swift。

self.socket.startTLS([kCFStreamSSLLevel:kCFStreamSocketSecurityLevelTLSv1, kCFStreamSSLValidatesCertificateChain:kCFBooleanFalse]) 

我试图找出一整天,我什至不能找出错误代码-9850的含义。 它没有与SecureTransport.h文件中的所有其他代码一起列出。

UPDATE1:

我发现苹果引入了应用程序传输安全,这意味着你可以声明你想build立安全连接的域名。 无论如何,我尝试与ATS,但没有任何成功。 -9850错误仍然存​​在问题。

更新2 – 解决scheme

正如Michal和Steven在他们的回答中所build议的那样,我开始怀疑主要的问题是服务器端的问题。
我和那个实现了服务器的人聊过,在他生成了新的长度为2048的ssl证书后,所有的问题都消失了。在那之前他们是512。
用新的证书,我身边的代码工作得很好。

-9850出现在埋在iOS 9 SDK中的SecureTransport.h头文件中:

 errSSLWeakPeerEphemeralDHKey = -9850, /* weak ephemeral dh key */ 

这听起来像米哈尔是在正确的轨道上。 对这个问题的一个更普遍的search导致我http://www.chromium.org/administrators/err_ssl_weak_server_ephemeral_dh_key

从Chrome 45开始,如果SSL / TLS握手尝试使用小于1024位的公钥(用于临时Diffie-Hellman密钥协议),则会触发此错误消息。

我并不是说iOS 9的要求与Chrome完全相同,但我会开始考虑服务器configuration,以及是否可以增加用于SSL握手的密钥大小。

我相信这与coreTLS有关 :

说明:coreTLS接受短暂的Diffie-Hellman(DH)密钥,用于出口强度短暂的DH密码套件。 这个问题也被称为Logjam,如果服务器支持导出强度短暂的DH密码套件,攻击者可以将具有特权networking位置的攻击者降级到512位DH。 通过将DH临时密钥的默认最小大小增加到768位来解决此问题。

从我可以告诉你的代码中,我猜你正在使用GCDAsyncSocket 。 它已经在10个月前更新了,所以它绝对不能反映这个问题。

当我得到CFNetwork SSLHandshake failed -(*)因为我的设备连接到networking,而不是互联网。