【问题标题】:How can i add a SSL Cert to my code in QT如何在 QT 中将 SSL 证书添加到我的代码中
【发布时间】:2016-08-13 09:41:34
【问题描述】:

我想要做的是发送一个 https 请求到 https://mapi.alipay.com/gateway.do?在QT中并得到回应。每当我 发送请求我收到以下错误。

qt.network.ssl:QSslSocket:无法调用未解析的函数 SSLv23_client_method qt.network.ssl:QSslSocket:无法调用 未解决的功能 SSL_CTX_new qt.network.ssl: QSslSocket: 不能 调用未解析的函数 SSL_library_init qt.network.ssl: QSslSocket: 无法调用未解析的函数 ERR_get_error qt.network.ssl: QSslSocket:无法调用未解析的函数 ERR_get_error 失败 “创建 SSL 上下文时出错 ()”

有人告诉我我需要 SSL 证书,所以我使用了

openssl s_client -connect mapi.alipay.com:443 -showcerts 

获取证书。但无论何时

如何在 QT 中将 SSL 证书添加到我的项目代码中?

    #include <QCoreApplication>
    #include <QDebug>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QNetworkReply>
    #include <QUrl>
    #include <QUrlQuery>
    #include <QFile>
    #include <QSslSocket>

    void sendRequest();

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        sendRequest();
        return a.exec();
    }
    void sendRequest(){



    // create custom temporary event loop on stack
    QEventLoop eventLoop;

    // "quit()" the event-loop, when the network request "finished()"
    QNetworkAccessManager mgr;
    QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));

    // the HTTP request
    QNetworkRequest req( QUrl( QString("https://mapi.alipay.com/gateway.do/_input_charset=UTF-8&currency=USD&notify_url=10.237.221.84:80&out_trade_no=123456789&partner=2088101122136241&sign=760bdzec6y9goq7ctyx96ezkz78287de&subject=Coke&sign_type=MD5&service=create_forex_trade&total_fee=0.01") ) );
    QNetworkReply *reply = mgr.get(req);
    eventLoop.exec(); // blocks stack until "finished()" has been called

    if (reply->error() == QNetworkReply::NoError) {
        //success
        qDebug() << "Success" <<reply->readAll();
        delete reply;
    }
    else {
        //failure
        qDebug() << "Failure" <<reply->errorString();
        delete reply;
    }
}

【问题讨论】:

标签: c++ qt ssl https


【解决方案1】:

要向您的 Qt 程序添加额外的 SSL 证书,您可以使用:

QSslSocket::addDefaultCaCertificates("example.pem");

但是,我认为这并不能解决您的任何错误。您问题中的错误与缺少 SSL 证书无关,而是与缺少 SSL 功能有关。您可能正在使用过时的 SSL 库? (例如 Windows 上的 libeay32.dll 和 ssleay32.dll 的旧版本或不兼容版本?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2012-02-03
    • 2018-02-02
    • 2019-07-12
    • 2020-10-12
    相关资源
    最近更新 更多