Подтверждение SSL не выполнено в среде BB10 QNX Momentics IDE

Я пытаюсь подключиться к веб-службе, использующей SSL. Я работаю с Blackberry 10 на С++ с помощью 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

Тип содержимого зашифрованного оповещения: 21

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

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

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

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

Ответ 1

После того, как вы связались с несколькими пользователями 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 Другим возможным способом является то, что нет общих для клиентов и серверных ciphersuites. Запустите Wireshark, он покажет обмен пакетами handshake. Там вы можете увидеть поддерживаемые ciphersuites, версии SSL/TLS и некоторую другую информацию.