2012-11-28 26 views
11

Tôi đang cố kết nối với dịch vụ web sử dụng SSL. Tôi đang làm việc với Blackberry 10 trong C++ với Moment Moment IDE QNX. Các kết nối mà tôi đang cố gắng để làm là như sau:Lỗi bắt tay SSL Không thành công trong BB10 QNX Momentics IDE

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

Code:

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

Tôi luôn nhận được cùng lỗi bất kể dịch vụ nào tôi cố gắng liên lạc. Câu trả lời là: SSL handshake thất bại

Wireshark Thông tin:

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 

các Encrypted Alert kiểu nội dung là 21

Các máy chủ bộ mật mã là trong danh sách các bộ mật mã được hỗ trợ của khách hàng.

Tôi đang sử dụng lib sau để tạo kết nối: QtNetwork/qnetworkreply.h

Tôi hy vọng thông tin mới này nâng cao chất lượng của câu hỏi.

Xin hãy trợ giúp, tôi đã tìm kiếm hàng giờ mà không thành công.

+0

Bất kỳ cơ hội của một chứng chỉ hết hạn? –

+0

Chứng chỉ không hết hạn. Cảm ơn @RodrigoHahn – mariomunera

Trả lời

2

Sau khi liên lạc với một vài RIM cá nhân về vấn đề cụ thể này, chúng tôi phát hiện ra rằng máy chủ TLS/SSL không dung nạp một số tiện ích mở rộng nhất định, vì vậy với mã Qt sau để vô hiệu hóa việc truyền mở rộng kết nối thành công qua https :

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

Tôi muốn đề cập đặc biệt đến bộ phận Phát triển ứng dụng của Research In Motion vì sự chú ý và nỗ lực đầu tư vào vấn đề này cho đến khi chúng tôi có cách đi đúng hướng.

Dưới đây là toàn bộ mã kết nối trong trường hợp đó ai đang đối mặt với nhu cầu này:

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

đây là mã rất hữu ích, nhưng tôi có một vấn đề. Nó rất chậm đối với tôi, trong giả lập và thiết bị thực. Bạn có ý tưởng nó có thể là gì không? – LILkillaBEE

0

Máy chủ của bạn có hỗ trợ TLS v.1 không? Có lẽ nó được cấu hình chỉ cho SSLv2-3, hoặc TLS v1.1-1.2 Cách khác có thể là không có chia sẻ bởi ciphersuites máy khách và máy chủ. Chạy Wireshark, nó sẽ hiển thị trao đổi gói bắt tay. Ở đó bạn có thể thấy các thuật toán mã hóa được hỗ trợ, các phiên bản SSL/TLS và một số thông tin khác.

+0

Xin chào! Tôi chỉ cần kiểm tra với Wireshark và ciphersuite máy chủ nằm trong danh sách khách hàng được hỗ trợ ciphersuites. Tôi vẫn không thể kết nối hoặc để tìm ra vấn đề là gì. Nhờ wireshark tôi cũng biết rằng kết nối kết thúc với một loại Cảnh báo được mã hóa 21. Tôi sẽ chỉnh sửa câu hỏi để thêm thông tin wireshark. – mariomunera