Сбой рукопожатия SSL в среде IDE BB10 QNX Momentics

Я пытаюсь подключиться к веб-сервису, который использует SSL. Я работаю с Blackberry 10 в C ++ с QNX IDE Momentics. Связь, которую я пытаюсь сделать, заключается в следующем:

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

Тип содержимого Encrypted Alert — 21

Серверные наборы шифров находятся в списке поддерживаемых наборов шифров клиента.

Я использую следующую lib для подключения: QtNetwork / qnetworkreply.h

Я надеюсь, что эта новая информация улучшит качество вопроса.

Пожалуйста, помогите, я искал часы без успеха.

11

Решение

После того, как мы связались с несколькими сотрудниками 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);
2

Другие решения

Поддерживает ли ваш сервер TLS v.1? Может быть, он настроен только для SSLv2-3 или TLS v1.1-1.2
Другой возможный способ состоит в том, что нет общих клиентских и серверных шифров.
Запустите Wireshark, он покажет обмен пакетами рукопожатия. Там вы можете увидеть поддерживаемые наборы шифров, версии SSL / TLS и некоторую другую информацию.

0