自从我将xcode更新为6.4 (仿真器到ios 8.4)后,我的ssl握手代码就失败了。
错误是: CFNetwork SSLHandshake失败(-9850)
同样的代码可以在ios 8.3模拟器上成功地执行ssl握手(我还尝试过xcode 6.4中的IOS8.3模拟器,它的握手效果很好)。
这是一段代码,它编码并开始握手。我在用斯威夫特。
self.socket.startTLS([kCFStreamSSLLevel:kCFStreamSocketSecurityLevelTLSv1,
kCFStreamSSLValidatesCertificateChain:kCFBooleanFalse])我一整天都在努力弄清楚这一点,甚至找不到错误代码-9850的含义。它没有与SecureTransport.h文件中的所有其他代码一起列出。
Update1:
我发现苹果引入了应用程序传输安全性,这意味着你可以声明你想要建立安全连接的域。不管怎样,我试过使用自动测试系统,但没有成功。-9850错误仍在制造问题。
更新2-解决方案
正如Michal和Steven在他们的回答中所建议的那样,我开始怀疑主要的问题是在服务器端,这最终是正确的。
我和实现服务器的家伙谈过,在他生成了长度为2048的新ssl证书之后,所有的问题都消失了。在此之前,他们只有512岁。
有了新的证书,我这边的代码就可以正常工作了。
发布于 2015-07-06 14:36:27
-9850出现在埋在SecureTransport.h 9 SDK中的iOS头中:
errSSLWeakPeerEphemeralDHKey = -9850, /* weak ephemeral dh key */听起来米哈尔是在正确的轨道上。对这个问题进行了更广泛的搜索,我找到了钥匙。
从Chrome 45开始,如果SSL/TLS握手试图使用小于1024位的公钥来实现短暂的Diffie-Hellman密钥协议,则会触发此错误消息。
我并不是说iOS 9的要求与Chrome完全相同,但我会开始研究服务器配置,如果您能够增加它用于SSL握手的密钥大小的话。
发布于 2015-07-06 14:08:56
我相信这和coreTLS有关
描述: coreTLS接受短时Diffie-Hellman ( DH )密钥,用于出口强度短暂的DH密码套件.这一问题,也被称为Logjam,允许具有特权网络位置的攻击者将安全级别降低到512位DH,如果服务器支持导出强度的临时DH密码套件的话。解决这个问题的方法是将DH临时密钥的默认最小大小提高到768位。
从您的代码中我可以看出,您使用的是GCDAsyncSocket。它是10个月前更新的,因此肯定没有反映这一问题。
发布于 2015-07-03 15:49:21
当我得到CFNetwork SSLHandshake failed -(*)时,它是因为我的设备连接到网络上,而不是互联网。
https://stackoverflow.com/questions/31208371
复制相似问题