5

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

有谁知道 iOS 是否支持 TLS 压缩?

4

1 回答 1

2

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

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

Apple 不支持压缩的第一个明显原因是我从我的设备 (6.1) 打开不同端口中的安全套接字进行的几次线捕获。在所有这些中,Client Hello 数据包只报告了一种压缩方法:null.

libsecurity_ssl然后我查看了Apple 提供的最后一个可用代码。这是 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根据 RFC 3749 是方法 1)。

下面,第 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必须实现并由每个客户提供)。

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

于 2013-06-17T21:47:00.070 回答