iOS是否支持TLS压缩?

时间:2012-08-07 05:13:02

标签: ios cocoa-touch compression ssl

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

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

1 个答案:

答案 0 :(得分:2)

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

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

Apple不支持压缩的第一个显而易见的原因是我从我的设备(6.1)在不同端口打开安全套接字的几次线路捕获。在所有这些中,Client 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 */

根据RFC 3749,没有别的(DEFLATE是方法1。)

下面是第469,476和482-483行(SSLProcessClientHello):

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

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

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