iOS是否支持TLS压缩?

问题描述:

我需要压缩通过我的iOS应用程序中的安全通道发送的数据,我想知道是否可以使用TLS compression。我无法弄清楚Apple的TLS实现Secure Transport是否支持相同的功能。iOS是否支持TLS压缩?

是否有其他人知道在iOS中是否支持TLS压缩?

我试图确定Apple的SSL/TLS实现是否支持压缩,但我不得不说,恐怕它没有。

起初我希望有一个errSSLPeerDecompressFail错误代码,必须有一种方法来启用压缩。但我找不到它。

Apple不支持压缩的第一个显而易见的原因是我从我的设备(6.1)在不同端口打开安全套接字时所做的几次线卡捕获。其中的所有客户端Hello报文只报告一种压缩方法:null

然后我看着Apple提供的libsecurity_ssl的最后一个可用代码。这是Mac OS X 10.7.5的实现,但是有些东西告诉我,如果不相同,那么iOS将会非常相似,但它肯定不会比Mac OS X更强大。

您可以将文件sslHandshakeHello.c中发现,线186-187(SSLProcessServerHello):

if (*p++ != 0)  /* Compression */ 
    return unimpErr; 

该错误代码,听起来很像“如果服务器发送另一个压缩,但null(0),我们不”实施,那么失败“。

再次,相同的文件时,线325(SSLEncodeClientHello):

*p++ = 0; /* null compression */ 

,别无其他周围(DEFLATE是方法1中,根据RFC 3749)。

下面,线469,476和482-483(SSLProcessClientHello):

compressionCount = *(charPtr++); 
... 
/* Ignore list; we're doing null */ 
... 
/* skip compression list */ 
charPtr += compressionCount; 

我认为这是很明显,这个实现只处理null压缩:它是在客户端发送的唯一一个您好,这是服务器Hello中唯一理解的,并且在收到客户端Hello时忽略压缩方法(每个客户端必须实现并提供null)。

所以我认为你和我都必须实现应用程序级压缩。祝你好运。

+0

感谢您深入挖掘! – 2013-06-18 05:11:34