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:
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 = "";
}
Et j'obtiens à l'exécution:
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"
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...

Une idée ?