Bonjour,
J'essaye d'accéder à un web service SOAP protégé par certificat (le certificat serveur est auto-signé ; le certificat client doit être présenté).
J'utilise Qt 4.5 de qt-copy (dans kde) mais j'avais le même problème avec Qt 4.4.x
J'utilise le code suivant:
Et j'obtiens à l'exécution:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 qDebug() << "setting up SSL configuration: " << m_sslKeyFile; QSslConfiguration sslConfiguration = request.sslConfiguration(); QFile sslCertificateFile(m_sslKeyFile); if (sslCertificateFile.open(QIODevice::ReadOnly)) { QSslCertificate certif(&sslCertificateFile); sslCertificateFile.close(); if (certif.isNull()) { qDebug() << "Failed to load certificate"; } qDebug() << "certif version=" << certif.version() << ", serial=" << certif.serialNumber() << ", issuer=" << certif.issuerInfo(QSslCertificate::Organization) << " and subject=" << certif.subjectInfo(QSslCertificate::CommonName); sslConfiguration.setLocalCertificate(certif); sslCertificateFile.close(); sslCertificateFile.open(QIODevice::ReadOnly); QSslKey key(&sslCertificateFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey); qDebug() << "key isNull ? " << key.isNull(); sslConfiguration.setPrivateKey(key); sslConfiguration.setProtocol(QSsl::SslV2); sslConfiguration.setPeerVerifyMode(QSslSocket::QueryPeer); request.setSslConfiguration(sslConfiguration); } ... qDebug() << "send post"; m_networkReply = m_networkAccessManager->post(request, m_tempFile); // m_networkAccessManager est QNetworkAccessManager ... void QSoapServiceClient::slotNetworkReplyError(QNetworkReply::NetworkError) { qDebug() << "QSoapServiceClient::slotNetworkReplyError: " << m_networkReply->errorString(); m_answer = ""; }
A noter: en utilisant un QProcess qui lance un curl avec les options -k et -E, ça marche... Donc le certificat est bon. C'est bien son utilisation dans mon code qui est mauvaise...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 setting up SSL configuration: "/path/to/pem/file" certif version= "" , serial= "" , issuer= "xxx" and subject= "yyy" key isNull ? false send post connecting reply signals sent QSoapServiceClient::slotNetworkReplyError: "SSL handshake failed"
Une idée ?
Partager