ich habe ein großes Problem bei der Implementierung eines Webservice-Clients mit SSL. Zunächst hatte ich mir einen freien Webservice-Server ohne SSL im Netz gesucht und konnte den auch soweit verwenden. Bei der Verwendung von SSL habe ich allerdings ständig das Problem, dass meine benötigten Zertifikate von Qt nicht gefunden werden können. In meinem Quellcode hole ich mir die aktuelle Default-Konfiguration und erweitere die Liste der caCertificates um die beiden Zertifikate im Ordner "C:/certTest/".
Code: Alles auswählen
// PREPERATIONS
connect(m_networkAccessManager,SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),this,SLOT(slot_sslErrorsSlot(QNetworkReply*,QList<QSslError>)));
QBuffer *l_buffer = this->prepareRequestBuffer();
QNetworkRequest l_request = this->prepareRequest();
// SSL CONFIG
QSslConfiguration l_sslConfig = QSslConfiguration::defaultConfiguration();
l_sslConfig.setProtocol(QSsl::TlsV1_0OrLater);
l_sslConfig.setSslOption(QSsl::SslOptionDisableSessionTickets, true);
l_sslConfig.setSslOption(QSsl::SslOptionDisableCompression, false);
QList<QSslCertificate> l_certs = l_sslConfig.caCertificates();
QDir l_caDir("C:/certTest/");
QStringList l_certFilenames = l_caDir.entryList();
for( int i=0; i<l_certFilenames.length(); i++)
{
if( l_certFilenames.at(i) != "." && l_certFilenames.at(i) != ".." )
{
QFile l_fileCert(l_caDir.absolutePath() + "/" + l_certFilenames.at(i));
if(!l_fileCert.open(QIODevice::ReadOnly))
{
qDebug() << "Cannot open CA certificate!";
}
QSslCertificate l_cert(&l_fileCert,QSsl::Pem);
l_fileCert.close();
l_certs.append(l_cert);
}
}
l_sslConfig.setCaCertificates(l_certs);
QSslConfiguration::setDefaultConfiguration(l_sslConfig);
// POST MESSAGE
QNetworkReply *l_reply = m_manager->post(l_request, l_buffer);
SSL ERROR
"The issuer certificate of a locally looked up certificate could not be found"
"No certificates could be verified"
Scheinbar kann Qt meine Zertifikate nicht finden. In Wireshark sieht das ganze dann so aus:
Code: Alles auswählen
1823 962.621597 172.28.254.191 10.39.5.181 TLSv1.2 571 Client Hello
1824 962.660543 10.39.5.181 172.28.254.191 TCP 54 443 → 61210 [ACK] Seq=1 Ack=518 Win=30336 Len=0
1825 962.664683 10.39.5.181 172.28.254.191 TLSv1.2 1420 Server Hello, Certificate
1826 962.664785 10.39.5.181 172.28.254.191 TLSv1.2 375 Server Key Exchange, Server Hello Done
1827 962.664811 172.28.254.191 10.39.5.181 TCP 54 61210 → 443 [ACK] Seq=518 Ack=1688 Win=16384 Len=0
1828 962.667858 172.28.254.191 10.39.5.181 TLSv1.2 180 Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message
1829 962.706037 10.39.5.181 172.28.254.191 TLSv1.2 105 Change Cipher Spec, Encrypted Handshake Message
1830 962.746854 172.28.254.191 10.39.5.181 TCP 54 61210 → 443 [ACK] Seq=644 Ack=1739 Win=16128 Len=0
1831 962.748077 172.28.254.191 10.39.5.181 TCP 54 61210 → 443 [FIN, ACK] Seq=644 Ack=1739 Win=16128 Len=0
1832 962.785958 10.39.5.181 172.28.254.191 TLSv1.2 85 Encrypted Alert
Qt-Version: 5.6.2
OpenSSL Build Version: 1.0.2g
OpenSSL Library Version: 1.0.2l
Zertifikatsname: CompanyEnterpriseCA02.pem , CompandyRootCA02.pem
Da ich kurz vor dem verzweifeln bin, bin ich um jede Hilfe dankbar.