BlackBerry OS 7.1安全TLS连接在很短的时间后关闭

mrv*_*nzo 5 blackberry blackberry-jde

问题摘要:相同的客户端 - 服务器配置,相同的网络拓扑,相同的设备(Bold 9900) - 在OS 7.0上运行良好,但在OS 7.1上无法正常工作,并且服务器在非常安全的tls连接后关闭短时间.

问题:OS 7.0和OS 7.1之间的安全tls连接打开是否应该有任何区别?RIM是否在7.1中改变了基础设施中的任何内容?在7.1中是否存在可能导致过早安全连接闭合的问题?

我的应用程序打开与服务器的安全tls连接.应用程序层保持活动机制保持连接,并保持打开状态,直到客户端关闭它.附件是实际代码的简化版本,它打开连接并从套接字读取.该代码在OS 5.0-7.0上运行良好,但在OS 7.1上无法正常工作.

在OS 7.1上运行时,阻塞在非常短的时间(10-45秒)后read()返回-1(已到达流的末尾).对于OS 5.0-7.0,调用将read()保持阻塞,直到下一个数据到达,并且服务器永远不会关闭连接.

Connection connection = Connector.open(connectionString);
connInputStream = connection.openInputStream();
while (true) {
    try {
        retVal = connInputStream.read();
        if (-1 == retVal) {
            break;   // end of stream has been reached
        }

    } catch (Exception e ) {
        // do error handling
    }

    // data read from stream is handled here
}
Run Code Online (Sandbox Code Playgroud)

更新1:
显然,只有在OS 7.1上使用安全tls连接(使用移动网络或WiFi)时才会出现问题.在OS 7.1上打开非安全连接时,一切都按预期工作.

对于移动网络上的tls,我使用以下连接字符串:

connectionString = "tls://someipaddress:443;deviceside=false;ConnectionType=mds-**secret**;EndToEndDesired";
Run Code Online (Sandbox Code Playgroud)

对于Wifi我使用以下连接字符串:

connectionString = "tls://someipaddress:443;interface=wifi;EndToEndRequired"
Run Code Online (Sandbox Code Playgroud)

更新2:
连接永远不会空闲.我一直在接收和发送数据.使用移动连接和WiFi时都会出现此问题.问题出现在真正的OS 7.1设备和模拟器上.我开始怀疑它与连接字符串或tls握手有某种关系.

更新3:
根据Wireshark对OS 7.1模拟器的捕获,服务器关闭了安全的tls连接(客户端接收FIN).目前我没有服务器的私钥,因此我无法调试tls握手,但我比以往任何时候都更确定根本原因是握手.

更新4:仅在OS 7.1上协商RSA 2048 AES 256密码套件
时,将显示受保护的tls连接丢弃.相同的密码套件在OS 7.0上运行良好.另一方面,当使用DHE/DSS 768 AES 128密码套件时,一切都按预期在OS 7.1上运行,并且连接保持稳定.它必须以某种方式与RSA 2048 AES 256密码suite.ideas相关?

mrv*_*nzo 1

在 RIM 的帮助下我终于弄清楚了(你可以在这里找到相关的票证)。所有功劳都归功于 RIM。

\n\n

在 OS 7.1 中,创建 TLS/SSL 连接时采用了新的安全措施。这里引用了 RIM 的文章。

\n\n
\n

最近发现了一种新的攻击,允许攻击者在使用 CBC 链接模式时结合窃听和选择明文攻击来解密 TLS 1.0 和 SSL 3.0 流量。

\n\n

为了解决这个问题,我们实施了一项符合 SSL 规范的更改,并被大多数浏览器广泛采用,例如 Mozilla\xc2\xae Firefox\xc2\xae 和 Google Chrome\xe2\x84\xa2。我们实施了一项对策,将 TLS 记录拆分为两条记录:第一条记录包含单个字节的数据,第二条记录包含其余数据,这可以阻止攻击者利用此漏洞。

\n
\n\n

完整文章可在此处访问。

\n\n

长话短说,为了减少与服务器的不兼容问题,我必须在打开连接之前向连接字符串添加“ DisableCbcSecurity=true ”属性。

\n\n

请注意,此解决方法适用于运行版本7.1.0.288及更高版本的设备,但我也因此它在运行 7.1.0.267 的 Torch 9860 上正常工作。

\n