【发布时间】:2012-08-04 02:14:45
【问题描述】:
我需要在我的 iOS 应用程序中压缩通过安全通道发送的数据,我想知道我是否可以使用 TLS compression 来做同样的事情。我无法弄清楚 Apple 的 TLS 实施 Secure Transport 是否支持相同的功能。
有没有人知道 iOS 是否支持 TLS 压缩?
【问题讨论】:
标签: ios cocoa-touch compression ssl
我需要在我的 iOS 应用程序中压缩通过安全通道发送的数据,我想知道我是否可以使用 TLS compression 来做同样的事情。我无法弄清楚 Apple 的 TLS 实施 Secure Transport 是否支持相同的功能。
有没有人知道 iOS 是否支持 TLS 压缩?
【问题讨论】:
标签: ios cocoa-touch compression ssl
我试图确定 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 */
没有别的了(DEFLATE 是方法 1,根据 RFC 3749)。
下面,第 469、476 和 482-483 行 (SSLProcessClientHello):
compressionCount = *(charPtr++);
...
/* Ignore list; we're doing null */
...
/* skip compression list */
charPtr += compressionCount;
我想很清楚这个实现只处理null压缩:它是Client Hello中唯一发送的,Server Hello中唯一理解的,Client Hello时忽略压缩方法已收到(null 必须由每个客户实施和提供)。
所以我认为你和我都必须实现应用程序级压缩。祝你好运。
【讨论】: