【问题标题】:Does iOS support TLS compression?iOS 是否支持 TLS 压缩?
【发布时间】:2012-08-04 02:14:45
【问题描述】:

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

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

【问题讨论】:

    标签: ios cocoa-touch compression ssl


    【解决方案1】:

    我试图确定 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 必须由每个客户实施和提供)。

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

    【讨论】:

    • 感谢您深入研究!
    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多