Защищенное TLS-соединение BlackBerry OS 7.1 закрывается через очень короткое время

Краткое описание проблемы:Тот же клиент -конфигурация сервера, та же топология сети, то же устройство (Жирный 9900)-отлично работает в ОС 7.0 , но не работает должным образом в ОС 7.1 и защищенное tls соединение закрывается сервером через очень короткое время.

Вопрос:Должна ли быть какая-либо разница в открытии защищенного соединения tls между OS 7.0 и OS 7.1? Изменила ли RIM что-нибудь в инфраструктуре tls в 7.1? Есть ли что-то, что может привести к преждевременному закрытию защищенного соединения tls в 7.1?

Мое приложение открывает защищенное tls-соединение с сервером. Соединение поддерживается механизмом поддержания -активности прикладного уровня и остается открытым до тех пор, пока клиент не закроет его. Прилагается упрощенная версия фактического кода, который открывает соединение и читает из сокета. Код отлично работает в OS 5.0 -7.0, но не работает должным образом в OS 7.1.

При работе в ОС 7.1 блокировка read()возвращается с-1(конец потока был достигнут )через очень короткое время (10 -45 секунд ). Для 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
}

ОБНОВЛЕНИЕ 1:
По-видимому, проблема возникает только тогда, когда я использую защищенное tls соединение (либо с использованием мобильной сети, либо WiFi )в ОС 7.1. Все работает как положено при открытии незащищенного соединения на OS 7.1.

Для tls в мобильных сетях я использую следующую строку подключения:

connectionString = "tls://someipaddress:443;deviceside=false;ConnectionType=mds-**secret**;EndToEndDesired";

Для tls на Wi-Fi я использую следующую строку подключения:

connectionString = "tls://someipaddress:443;interface=wifi;EndToEndRequired"

ОБНОВЛЕНИЕ 2:
Соединение никогда не бывает бездействующим . Я постоянно получаю и отправляю данные по нему. Проблема возникает как при использовании мобильного подключения, так и при использовании WiFi. Проблема возникает как на реальных устройствах с ОС 7.1, так и на симуляторах. Я начинаю подозревать, что это как-то связано либо со строкой подключения, либо с рукопожатием tls.

ОБНОВЛЕНИЕ 3:
Согласно перехватам Wireshark, которые я сделал с помощью симулятора OS 7.1, защищенное соединение tls закрывается сервером (клиент получает FIN). На данный момент у меня нет закрытого ключа сервера, поэтому я не могу отладить рукопожатие tls, но я более чем когда-либо уверен, что основной причиной является рукопожатие tls.

ОБНОВЛЕНИЕ 4:
Разрыв защищенного соединения tls появляется, когда набор шифров RSA 2048 AES 256 согласовывается только в ОС 7.1. Тот же набор шифров отлично работает на OS 7.0. С другой стороны, при использовании набора шифров DHE/DSS 768 AES 128 все работает, как и ожидалось, в ОС 7.1, и соединение остается стабильным. Это должно быть как-то связано с RSA 2048 AES 256 cipher suite.ideas?

5
задан 17 revs 13 July 2012 в 05:23
поделиться