2017-01-23 6 views
0

У меня проблема, что в приведенном ниже коде «QSslCertificate :: fromPath» не находит указанный мной файл, но когда я его проверю с функцией fileExists ниже, он сообщает мне, что файл существует в конце концов. Эта проблема возникает только при попытке запуска моего приложения на ПК, отличном от моего компьютера разработки. Я разрабатываю Windows 10 64 бит, тестовый ПК - это Windows 7 64 бит. Я использую QT 5.4.0. Что я делаю не так?Qt: QSslCertificate :: fromPath не находит мой файл, но QFileInfo находит его

void MyClass::init() 
{ 

    // ... some other init code 

    QLatin1String rootCApath = QLatin1String("./ssl/rootCA.crt"); 
    if (fileExists(rootCApath)) 
     log("File exists"); // This is just a log function for displaying messages in the GUI. 
    else 
     log("File doesn't exist"); 

    static QList<QSslCertificate> cert = QSslCertificate::fromPath(rootCApath); 
    if(cert.size()==1) 
    { 
     ssl_configuration.setCaCertificates(cert); 
     m_webSocket.setSslConfiguration(ssl_configuration); 
    } 
    else 
    { 
     QString s = "Server certificate not found. Size is " + QString::number(cert.size()); 
     log(s); 
    } 
} 

bool MyClass::fileExists(QString path) { 
    QFileInfo check_file(path); 
    // check if file exists and if yes: Is it really a file and no directory? 
    return check_file.exists() && check_file.isFile(); 
} 

редактировать: И когда я прочитал сертификат в QByteArray и передать, что один на, то мой подключения функция ничего не делает на этом ПК Windows 7, в то время как на моем Windows, 10 Developer PC все еще работает отлично ,

Также есть еще один ПК, который последовательно дает мне ошибки установления связи TLS, независимо от того, что я делаю. 3 ПК, 3 результата, это так удручает.

ответ

0

Я нашел решение в моем случае: я не добавлял библиотеки OpenSSL libeay32.dll и ssleay32.dll в каталог, где мой exe находится в.

0

Ваш код отлично выглядит и работает на моей Linux-системе без каких-либо проблем. Вы должны проверить, относительный путь или просто попытаться установить сертификат с помощью QFileInfo:

QLatin1String rootCApath = QLatin1String("./ssl/rootCA.crt"); 
QFileInfo temp(rootCApath); 
QString tempssl; 
QDir dir ;//try to set dir also if this does not work dir("/home/foo/yourapppath/"); 

tempssl=dir.relativeFilePath("./ssl/rootCA.crt"); 
static QList<QSslCertificate> cert = QSslCertificate::fromPath(tempssl); 

if(cert.size()==1) 
{ 
    ssl_configuration.setCaCertificates(cert); 
    m_webSocket.setSslConfiguration(ssl_configuration); 
} 
else 
{ 
    QString s = "Server certificate not found. Size is " + QString::number(cert.size()); 
    log(s); 
} 
+0

К сожалению, это не помогло, независимо от того, установлен ли QDir для QCoreApplication :: applicationDirPath(). – Alex

 Смежные вопросы

  • Нет связанных вопросов^_^