2012-11-28 5 views
11

SSL을 사용하는 웹 서비스에 연결하려고합니다. 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); 

나는 항상 같은 받고 있어요 도달하려는 서비스에 상관없이 오류. 응답은 다음과 같습니다

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

서버의 암호화 방식 클라이언트 지원되는 암호화 방식의 목록입니다 : SSL 핸드 쉐이크

와이어 샤크 정보에 실패했습니다.

나는 연결을 다음 LIB를 사용하고 있습니다 : QtNetwork/qnetworkreply.h

나는이 새로운 정보를 질문의 질을 향상 바랍니다.

제발 도와주세요, 나는 수 시간 동안 성공하지 못했습니다.

+0

만료 된 인증서의 모든 기회를? –

+0

인증서가 만료되지 않았습니다. 고마워요 @ RodrigoHahn – mariomunera

답변

2

이 특정 문제에 대한 개인적인 몇 RIM과 연락을 받고 후에 우리는 연결이 성공적으로 HTTPS를 통해 만들어진 확장의 전송을하지 않으려면 다음 Qt는 코드 있도록 TLS/SSL 서버가 특정 확장자의 관용 것을 발견 : 나는 관심과 우리가 마지막으로 갈 수있는 올바른 방법을 가지고 때까지이 문제에 대한 투자 노력에 대한 리서치 인 모션 (RIM)의 응용 프로그램 개발 부서의 특별한 언급을 만들고 싶어

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

.

아래의 경우 전체 연결 코드는 사람이 필요 향하도록 :

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

이것은 매우 유용한 코드이지만 문제가 하나 있습니다. 에뮬레이터 및 실제 장치에서도 저에게는 매우 느립니다. 무엇이 될 수 있는지 알고 있습니까? – LILkillaBEE

0

서버가 TLS v.1을 지원합니까? 어쩌면 SSLv2-3 또는 TLS v1.1-1.2에 대해서만 구성되었을 수도 있습니다. 다른 가능한 방법은 클라이언트 및 서버 암호 세트가 공유하지 않는 것입니다. Wireshark를 실행하면 핸드 셰이크 패킷 교환이 표시됩니다. 여기서 지원되는 암호 세트, SSL/TLS 버전 및 기타 정보를 볼 수 있습니다.

+0

안녕하세요. Wireshark를 사용하여 확인하고 서버 암호 조합은 클라이언트 암호 지원 목록에 있습니다. 나는 아직도 연결할 수 없거나 문제가 무엇인지 파악할 수 없다. wireshark 덕분에 연결이 암호화 된 경고 유형 21로 끝나는 것을 알고 있습니다. wireshark 정보를 추가하기 위해 질문을 편집 할 것입니다. – mariomunera