2012-11-28 13 views
11

SSLを使用するWebサービスに接続しようとしています。私はQNX IDE Momenticsを使ってC++でBlackberry 10を使っています。次のように私がやろうとしているという接続は次のとおりです。BB10 QNX Momentics IDEでSSLハンドシェイクが失敗しました

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

コード:

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); 

私はいつも同じことを取得しています私が到達しようとするサービスに関係なくエラー。応答は次のとおりです。 SSLハンドシェークが

Wiresharkの情報に失敗しました:

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 

暗号化されたアラートのコンテンツタイプが21の

サーバの暗号群であるが、クライアントのサポートされている暗号スイートのリストです。

私は接続を行うために、次のlibを使用しています:QtNetwork/qnetworkreply.h

私は、この新しい情報は、質問の品質を向上させる願っています。

助けてください、私は何時間も成功していませんでした。

+0

期限切れの証明書の任意のチャンス? –

+0

証明書は有効期限切れではありません。ありがとう@RodrigoHahn – mariomunera

答えて

2

この特定の問題についていくつかのRIMに連絡した後、私たちはTLS/SSLサーバーが特定の拡張機能を許容しないことを知ったので、拡張機能の送信を無効にする次のQtコードでは、https :

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

私たちは最終的に行くための正しい方法を持ってまで、この問題に投下注意と努力のためには、Research In Motionのアプリケーション開発部門の特別な言及を作りたいです。以下は

誰もが、この必要性に直面した場合の全体の接続コードです:

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

これは非常に参考になるコードですが、私には1つの問題があります。エミュレータと実際のデバイスでも、私にとっては非常に遅いです。 あなたはそれが何であるか考えていますか? – LILkillaBEE

0

サーバはTLS v.1をサポートしていますか?たぶんSSLv2-3、またはTLS v1.1-1.2のためだけに設定されているかもしれません もう1つの可能な方法は、クライアントとサーバーの暗号スイートによって共有されないことです。 Wiresharkを実行すると、ハンドシェイクパケット交換が表示されます。サポートされている暗号スイート、SSL/TLSバージョンなどの情報が表示されます。

+0

こんにちは。私はちょうどWiresharkでチェックし、サーバの暗号スイートはクライアントの暗号スイートでサポートされているリストの中にあります。私はまだ接続することはできませんか、問題が何かを把握することはできません。 wiresharkのおかげで、暗号化アラートタイプ21で接続が終了することも知っています。wireshark情報を追加するために質問を編集します。 – mariomunera

関連する問題