我需要压缩在iOS应用中通过安全通道发送的数据,我想知道是否可以使用TLS compression。我无法弄清楚Apple的TLS实现Secure Transport是否支持相同的功能。
是否有其他人知道iOS中是否支持TLS压缩?
答案 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
)。
所以我认为你和我都必须实现应用程序级压缩。祝你好运。