I am new to Qt, and in my application i need to connect to a remote service hosted in secure environment. I need to add certificates to the Network request inorder to process the request.
void QtSoapHttpTransport::submitRequest(QtSoapMessage &request, const QString &path)
{
QNetworkRequest networkReq;
QFile sslCertificateFile("Certificate1.cer");
QFile sslCertificateFileserver("Certificate2.cer");
QSslConfiguration sslConfiguration;
QSslCertificate sslCertificate;
QSslCertificate sslCertificateserver;
if ( (sslCertificateFile.open(QIODevice::ReadOnly)) &&
sslCertificateFileserver.open(QIODevice::ReadOnly))
{
// Read certificates from file
QByteArray aray = sslCertificateFile.readAll();
qDebug() << aray;
// Read server ceriticate file
QByteArray arayserver = sslCertificateFileserver.readAll();
qDebug() << arayserver;
// Load Client
QList<QSslCertificate> sslCertificateList = QSslCertificate::fromData(aray,QSsl::Pem);
qDebug("Found certificates: %d", sslCertificateList.size());
sslCertificate = sslCertificateList.takeAt(0);
QByteArray testarray = sslCertificate.digest(QCryptographicHash::Sha1);
qDebug() << testarray;
// Load Server
QList<QSslCertificate> sslCertificateListserver = QSslCertificate::fromData(arayserver,QSsl::Der);
sslCertificateserver = sslCertificateListserver.takeAt(0);
QList<QSslCertificate> ceritifcates;
ceritifcates.append(sslCertificate);
ceritifcates.append(sslCertificateserver);
QSslKey key(&sslCertificateFile, QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
qDebug() << "key isNull ? " << key.isNull();
sslConfiguration.setPrivateKey(key);
//sslConfiguration.setLocalCertificate(sslCertificate);
sslConfiguration.setLocalCertificateChain(ceritifcates);
sslConfiguration.setProtocol(QSsl::AnyProtocol);
networkReq.setSslConfiguration(sslConfiguration);
}
networkReq.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml;charset=utf-8"));
QByteArray array;
array.append(soapAction);
networkReq.setRawHeader("SOAPAction",array);
QUrl url2 = path ;
networkReq.setUrl(url2);
soapResponse.clear();
networkRep = networkMgr.post(networkReq, request.toXmlString().toUtf8().constData());
}
But i am not able to get the Certificate list using “QSslCertificate::fromData(arayserver,QSsl::Der);” . The list is empty. please let me know how to rectify the issue or please suggest any other way to access SSL Certified Service using Qt.
Note: I have installed Open Ssl and i am configuring it in the project file like below
CONFIG += openssl
LIBS += -L"C:/OpenSSL-Win32/lib" -llibeay32
↧