以前做Qt的https通信时,在代码里加入适配置https的配置就可以了
如:
void onSendHttpsRequest(QString url)
{
QNetworkAccessManager* pManager = new QNetworkAccessManager(this);
QNetworkRequest request;
// 发送https请求前准备工作;
QSslConfiguration config;
QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
conf.setProtocol(QSsl::TlsV1SslV3);
request.setSslConfiguration(conf);
request.setUrl(QUrl(url)); // "https://www.myselfurl.com"
QNetworkReply *pReply = pManager->post(request, bytePost);
connect(pReply , SIGNAL(finished()) , this , SLOT(onFinished());
connect(pReply , SIGNAL(error(QNetworkReply::NetworkError)) , this , SLOT(onError(QNetworkReply::NetworkError)));
}
这样就可以进行https通信了(加上必要的引用库)
现在的项目是要与Java服务器进行通信,而且使用java导出的p12的证书,研究了很久,终于在github上找到了方法
https://github.com/trueos/sysadm-ui-qt/blob/master/src-qt5/gui_client/SSLNotes.txt
具体示例如下
QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
connect(accessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotFinished(QNetworkReply*)));
qDebug() << "accessManager==1==suportedSchemes()=====" << accessManager->supportedSchemes();
#ifndef QT_NO_SSL
connect(accessManager, &QNetworkAccessManager::sslErrors, this, &MainWindow::sslErrors);
#endif
QNetworkRequest request;
request.setUrl(QUrl("https://cc.abcdefg.com:368/huapi/config/get"));
//设置协议头
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
request.setRawHeader(QByteArray("api-ver"), QByteArray("100"));
request.setRawHeader(QByteArray("t-type"), QByteArray("3"));
//使用证书认证
QString password = "123456";
QFile pkcs("D:\\work\\bin64\\release\\cc.p12");
pkcs.open(QFile::ReadOnly);
QSslKey key;
QSslCertificate certificate;
QList<QSslCertificate> importedCerts;
bool imported = QSslCertificate::importPkcs12(&pkcs, &key, &certificate, &importedCerts, QByteArray::fromStdString(password.toStdString()));
pkcs.close();
qDebug() << "imported-===================" << imported;
if (imported)
{
QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
QList<QSslCertificate> certs = sslConfig.caCertificates();
QList<QSslCertificate> localCerts = sslConfig.localCertificateChain();
localCerts.append(certificate);
certs.append(importedCerts);
sslConfig.setLocalCertificateChain(localCerts);
sslConfig.setCaCertificates(certs);
sslConfig.setPrivateKey(key);
QSslConfiguration::setDefaultConfiguration(sslConfig);
}
QString strUUID = QSysInfo::machineUniqueId();
QJsonObject jsonData;
jsonData.insert("uuid", QString(strUUID));
jsonData.insert("appkey", QString(m_strKey));
QByteArray byte_array = QJsonDocument(jsonData).toJson();
qDebug() << "byte_array=======" << byte_array;
accessManager->post(request, byte_array);