Qt加载cc.p12证书

以前做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);

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值