Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QtSoap网络传输错误(99):创建SSL上下文()时出错_C++_Ssl_Https_Webserver - Fatal编程技术网

C++ QtSoap网络传输错误(99):创建SSL上下文()时出错

C++ QtSoap网络传输错误(99):创建SSL上下文()时出错,c++,ssl,https,webserver,C++,Ssl,Https,Webserver,我使用ssl协议连接到web服务时遇到问题。我试图使用开放库QtSoap与specyfiedWebService连接。从现在起,我一直在搜索我在主题中提到的任何错误解决方案,但没有为linuxmint系统找到任何解决方案。我只见过一个,人们确认是这里和这里的窗户。我有此Web服务的证书,其中包含一个密钥 我的代码: #include "qtsoap.h" ... int main(int argc, char **argv) { ... QtSoapMessage message;

我使用
ssl
协议连接到web服务时遇到问题。我试图使用开放库
QtSoap
与specyfied
WebService
连接。从现在起,我一直在搜索我在主题中提到的任何错误解决方案,但没有为
linuxmint
系统找到任何解决方案。我只见过一个,人们确认是这里和这里的窗户。我有此Web服务的证书,其中包含一个密钥

我的代码:

#include "qtsoap.h"
...
int main(int argc, char **argv)
{
...
    QtSoapMessage message;
    QSsl::SslProtocol protocol = QSsl::SslV2;
    message.addHeaderItem(new QtSoapSimpleType(QtSoapQName("tagName"),"tagValue"));
...
    message.setMethod("method", "WSAddress");
    message.addMethodArgument("attr", "", value);
...
    QtSoapHttpTransport http;
    http.setHost("ipaddress", true, port);
    http.setAction("http://tempuri.org/IDataService/DARTGetReservationData");
    http.submitRequest(message, "path", protocol, "certificatePath");
}
如果您在submitRequest中已经注意到,我已经在一个库中做了一些更改,添加了特定的SslProtocol和certificatePath。这是一个遗憾:

void QtSoapHttpTransport::submitRequest(QNetworkRequest &networkReq, QtSoapMessage &request, const QString &path, QSsl::SslProtocol ssl, QString certificatePath)
{
    networkReq.setHeader(QNetworkRequest::ContentTypeHeader, QLatin1String("text/xml;charset=utf-8"));
    networkReq.setRawHeader("SOAPAction", soapAction.toLatin1());
    url.setPath(path);
    networkReq.setUrl(url);
    QSslConfiguration sslConf = networkReq.sslConfiguration();

    soapResponse.clear();
    if(certificatePath != NULL)
    {
        QFile sslCertificateFile(certificatePath);
        if (sslCertificateFile.open(QIODevice::ReadOnly))
        {
            QSslCertificate certif(&sslCertificateFile);
            if (certif.isNull())
            {
                qDebug() << "Failed to load certificate";
            }
            sslConf.setLocalCertificate(certif);
            sslConf.setPrivateKey(certif.publicKey());
            qDebug() << "certif version=" << certif.version() << ", serial=" << certif.serialNumber()
                << ", issuer=" << certif.issuerInfo(QSslCertificate::Organization)
                << " and subject=" << certif.subjectInfo(QSslCertificate::CommonName);
            QSslKey key(certif.publicKey());
            qDebug() << "key isNull ? " << key.isNull();
            sslConf.setPrivateKey(key);
            sslCertificateFile.close();
        }
        else
            qDebug() << "Cannot open certificate";
    }

    if(ssl != NULL)
        sslConf.setProtocol(ssl);
    networkReq.setSslConfiguration(sslConf);

    networkRep = networkMgr.post(networkReq, request.toXmlString().toUtf8().constData());
}
另一件可能出错的事情是,我不知道还有其他一些库丢失了。我希望有人找到了这个问题的解决办法


对不起,我的英语很差。

我用
qt4.8.6
尝试这个源代码,而
qt5.3
情况重复出现类似错误。在第一种情况下,我在第二种情况下的主题“网络传输错误(99):无法初始化SSL上下文”中得到了说明。您好,我在这个问题上取得了一些进展。正如[1]中所说,我使用安装文件线索安装了openssl。之后,我将libcrypto.so和libssl.so文件复制到/usr/lib中。问题消失了。现在我面临这样的安全性问题:“验证消息安全性时出错”。但这是另一个问题。[1]:
#include <QSslCertificate>
#include <QSsl>
#include <QSslConfiguration>
#include <QSslKey>
#include <QFile>
QT       += core network xml
QT        -= gui

TARGET = SSLConnectionTest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    qtsoap.cpp

HEADERS += \
    qtsoap.h