iOS是否支持TLS压缩?

Cha*_*pta 5 compression ssl cocoa-touch ios

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

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

yon*_*ytu 2

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

\n\n

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

\n\n

Apple 不\xe2\x80\x99t 支持压缩的第一个明显原因是我从我的设备 (6.1) 在不同端口中打开安全套接字时进行的多次线路捕获。在所有这些中,客户端 Hello 数据包仅报告一种压缩方法:null

\n\n

libsecurity_ssl然后我查看了Apple 提供的最后可用代码。这是 Mac OS X 10.7.5 的实现,但有件事告诉我,iOS 的实现即使不一样,也会非常相似,但肯定不会比 Mac OS X 更强大。

\n\n

您可以在文件sslHandshakeHello.c第 186-187 行 ( SSLProcessServerHello) 中找到:

\n\n
if (*p++ != 0)      /* Compression */\n    return unimpErr;\n
Run Code Online (Sandbox Code Playgroud)\n\n

该错误代码听起来很像 \xe2\x80\x9c,如果服务器发送另一个压缩,但是null(0),我们不\xe2\x80\x99t 实现它,所以失败\xe2\x80\x9d。

\n\n

同样,同一个文件,第 325 行 ( SSLEncodeClientHello):

\n\n
*p++ = 0; /* null compression */\n
Run Code Online (Sandbox Code Playgroud)\n\n

周围没有其他任何东西(DEFLATE根据 RFC 3749 是方法 1)。

\n\n

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

\n\n
compressionCount = *(charPtr++);\n...\n/* Ignore list; we\'re doing null */\n...\n/* skip compression list */\ncharPtr += compressionCount;\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n