問題摘要:同一個客戶端 - 服務器的配置,相同的網絡拓撲結構,相同的設備(粗體9900) - 完美的作品以及對OS 7.0但不工作如預期在操作系統7.1和安全tls連接正在由服務器關閉很短的時間後。黑莓OS 7.1安全TLS連接是很短的時間後關閉
問題:是否應該在OS 7.0和OS 7.1之間的安全連接打開方面有任何不同? RIM在7.1中修改了tls基礎設施中的任何內容嗎?在7.1中是否有可能導致過早的安全連接關閉?
我的應用程序打開一個安全的tls連接到服務器。該連接通過應用程序層保持活動機制保持活動狀態,並保持打開狀態,直到客戶端關閉它。附件是打開連接並從套接字讀取的實際代碼的簡化版本。該代碼在OS 5.0-7.0上完美工作,但在OS 7.1上無法按預期工作。
當在OS 7.1上運行時,阻塞read()
以非常短的時間(10-45秒)返回-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
}
UPDATE 1:
顯然,該問題當我使用上OS 7.1固定TLS連接(使用移動網絡或WiFi)纔會出現。在OS 7.1上打開一個非安全連接時,一切都按預期工作。
有關I使用下面的連接字符串移動網絡TLS:
connectionString = "tls://someipaddress:443;deviceside=false;ConnectionType=mds-**secret**;EndToEndDesired";
有關無線上網的TLS我使用下面的連接字符串:
connectionString = "tls://someipaddress:443;interface=wifi;EndToEndRequired"
UPDATE 2:
連接永遠不會空閒。我一直在接收和發送數據。使用移動連接和WiFi時都會出現此問題。這個問題出現在真實的OS 7.1設備和模擬器上。我開始懷疑它與連接字符串或tls握手有關。
UPDATE 3:
據的Wireshark捕獲我與OS 7.1模擬器,有擔保TLS連接正被關閉服務器(客戶端接收FIN)。目前我沒有服務器的私鑰,因此我無法調試tls握手,但我比以往更確定根本原因是握手。
UPDATE 4:
有擔保TLS連接時下降RSA 2048 AES 256密碼套件僅OS 7.1協商出現。相同的密碼套件在OS 7.0上完美運行。另一方面,當使用DHE/DSS 768 AES 128密碼套件時,在OS 7.1上一切都按預期工作,並且連接保持穩定。它必須以某種方式與相關RSA 2048 AES 256 cipher suite.ideas?
我不是專家,但可以專門爲tls連接配置服務器嗎? – 2012-07-05 21:42:52
@EugenMartynov服務器配置正確。相同的服務器,運行OS5/6/7的相同客戶端 - >一切正常(安全和非安全)。 – mrvincenzo 2012-07-06 04:07:39
當它返回-1(流結束)時,它是否在一致的秒數之後這樣做?你提到過「30-45」。如果你確切地說是時間的話,這暗示它正在發生某種超時。我使用的一個技巧是配置一個'奇怪'的超時,比如35秒,以幫助診斷它來自哪裏。你有沒有嘗試過使用https連接字符串? – seand 2012-07-06 06:01:39