2012-11-28 11 views
11

Sto tentando di stabilire una connessione a un servizio Web che utilizza SSL. Sto lavorando con Blackberry 10 in C++ con QNX IDE Momentics. Il collegamento che sto cercando di fare è la seguente:Handshake SSL non riuscito in BB10 QNX Momentics IDE

URL: "https: // movilapi ...."

Codice:

networkAccessManager = new QNetworkAccessManager(this); 
    bool res = connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), 
      this, SLOT(requestFinished(QNetworkReply*))); 

    Q_ASSERT(res); 
    Q_UNUSED(res); 

    QNetworkRequest request = QNetworkRequest(QUrl(url)); 
    request.setRawHeader("User-Agent", "bb-phone/20120910"); 
    request.setRawHeader("Content-Type", "application/json"); 
    request.setRawHeader("Content-Length", postDataSize); 

    QSslConfiguration sslConfig = request.sslConfiguration(); 
    sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); 
    sslConfig.setProtocol(QSsl::TlsV1); 
    request.setSslConfiguration(sslConfig); 

     networkAccessManager->post(request, outData); 

sto ottenendo sempre lo stesso errore indipendentemente dal servizio che cerco di raggiungere. La risposta è: handshake SSL fallita

Wireshark Info:

Protocol Length Info 
SSLv2 157 Client Hello 
TLSv1 1202 Server Hello, Certificate, Server Hello Done 
TLSv1 449 Client Key Exchange 
TLSv1 60  Change Cipher Spec 
TLSv1 91  Encrypted Handshake Message 
TLSv1 97  Change Cipher Spec, Encrypted Handshake Message 
TLSv1 605 Application Data 
TLSv1 280 Application Data 
TLSv1 277 Application Data 
TLSv1 121 Application Data 
TLSv1 92  Application Data 
TLSv1 297 Application Data, Application Data, Application Data, Application Data 
TLSv1 77  Encrypted Alert 

Il tipo di contenuto crittografato Alert è 21

i server ciphersuites è nella lista dei ciphersuites supportate del cliente.

Sto utilizzando il seguente lib per effettuare la connessione: QtNetwork/qnetworkreply.h

spero che questo nuovo informazioni migliorare la qualità della domanda.

Si prega di aiuto, ho cercato per ore senza successo.

+0

Ogni possibilità di un certificato scaduto? –

+0

Il certificato non è scaduto. Grazie @RodrigoHahn – mariomunera

risposta

2

Dopo aver contattato alcuni RIM personali su questo particolare problema, abbiamo scoperto che il server TLS/SSL è intollerante a determinate estensioni, quindi con il seguente codice Qt per disabilitare la trasmissione di estensioni la connessione è stata effettuata con successo tramite https :

QSslConfiguration cfg(request.sslConfiguration()); 
cfg.setSslOption(QSsl::SslOptionDisableSessionTickets, true); 
request.setSslConfiguration(cfg); 

voglio fare menzione speciale del dipartimento sviluppo di applicazioni di Research In motion per l'attenzione e lo sforzo investito su questo tema fino a quando abbiamo finalmente la strada giusta da percorrere.

Di seguito è riportato l'intero codice di connessione nel caso in cui nessuno sta affrontando questa esigenza:

networkAccessManager = new QNetworkAccessManager(this); 
bool res = connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), 
      this, SLOT(requestFinished(QNetworkReply*)));  
QNetworkRequest request = QNetworkRequest(QUrl(url)); 
request.setRawHeader("User-Agent", "BB_PHONE/20120926"); 
request.setRawHeader("Content-Type", "application/json"); 
request.setRawHeader("Content-Length", postDataSize); 

QSslConfiguration sslConfig = request.sslConfiguration(); 
sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); 
sslConfig.setPeerVerifyDepth(1); 
sslConfig.setProtocol(QSsl::TlsV1); 
sslConfig.setSslOption(QSsl::SslOptionDisableSessionTickets, true); 

request.setSslConfiguration(sslConfig); 
networkAccessManager->post(request, outData); 
+0

questo è un codice molto utile, ma ho un problema. È molto lento per me, anche in emulatore e dispositivo reale. Hai un'idea di cosa potrebbe essere? – LILkillaBEE

0

Il server supporta TLS v.1? Forse è configurato solo per SSLv2-3 o TLS v1.1-1.2 L'altro modo possibile è che non ci sono condivisioni tra client e server. Esegui Wireshark, mostrerà lo scambio di pacchetti di handshake. Qui puoi vedere ciphersuites supportate, versioni SSL/TLS e alcune altre informazioni.

+0

Ciao. Ho appena controllato con Wireshark e il server ciphersuite è incluso nell'elenco dei client supportati da ciphersuites. Non sono ancora in grado di connettermi o di capire qual è il problema. Grazie a wireshark so anche che la connessione termina con un Encrypted Alert di tipo 21. Vado a modificare la domanda per aggiungere le informazioni su wireshark. – mariomunera

Problemi correlati