2017-04-25 5 views
0

Mon but est d'obtenir le code source (ou les images) à partir d'une page Web sur une connexion SSL en utilisant QNetworkRequest avec le QNetworkAccessManager.Comment installer OpenSSL 1.1.0 pour Qt sous Windows?

OpenSSL 1.1.0 ne fonctionne pas avec Qt 5.8! Regardez dans Edit 2 pour la solution d'installation!

premier essai: Obtenez le ssleay32.lib et le libeay32.lib et les copier dans le débogage et le dossier de presse. Ne pas travailler.

Deuxième essai: (supprimé parce qu'il est un non-sens) Mais il ne fonctionne pas encore.

code (fonctionne très bien pour http normal):

QUrl url = QUrl(name); 
data.clear(); 

QNetworkRequest *request = new QNetworkRequest(url); 
request->setRawHeader("User-Agent", userAgent); 

QSslConfiguration sslConfiguration(QSslConfiguration::defaultConfiguration()); 
request->setSslConfiguration(sslConfiguration); 

reply = webCtrl->get(*request); 

connect(webCtrl, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); 
connect(reply, SIGNAL(readyRead()), this, SLOT(onReadyRead())); 
connect(reply, SIGNAL(finished()), this, SLOT(onReplyFinished())); 

Messages d'erreur:

qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams 
qt.network.ssl: QSslSocket: cannot call unresolved function DH_free 
qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams 
qt.network.ssl: QSslSocket: cannot call unresolved function DH_free 
qt.network.ssl: QSslSocket: cannot call unresolved function d2i_DHparams 
qt.network.ssl: QSslSocket: cannot call unresolved function DH_free 
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method 
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new 
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init 
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error 
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error 
Error creating SSL context() 

Modifier 1: J'ai trouvé this Artikel et OpenSSL 1.1.0 travailleront avec Qt 5.10 mais pas dans Qt 5.8 ce que j'utilise. Et dans this Artikel J'ai trouvé la commande QSslSocket::sslLibraryBuildVersionString() et j'ai besoin d'OpenSSL Version: OpenSSL 1.0.2h 3 May 2016.

Je vais vérifier l'autre version d'OpenSSL plus tard et éditer ce post s'il fonctionne ou pas.

Edit 2: Télécharger et installer OpenSSL 1.0.2h 3 May 2016 7zip et Perl. Extrayez le dossier openSSL et suivez INSTALL.W64. Accédez au dossier bin et copiez libeay32-xxx.dll et ssleay32-xxx.dll dans le dossier de l'application et renommez les fichiers en libeay32.dll et ssleay32.dll. Merci @ [Max Go].

Maintenant, la connexion SSL fonctionne enfin, mais un message d'erreur s'affiche lorsque je ferme l'application et que la connexion Web est utilisée au moment de l'exécution.

Exception à 0x000000007772D1CB (ntdll.dll) dans onlineTest.exe: 0xC0000005: accès position de lecture de violation 0x0000000000000074.

VS2015 fenêtre de débogage ligne "mem.c" 443:

  1. free_debug_func 0x0000000000000000 void(*)(void *, int)
  2. free_func 0x000007fee778b1ba {libeay32.dll!free} void(*)(void *)
  3. str 0x0000000002500cf0 void *
+2

Vous essayez de copier les bibliothèques statiques d'openssl, mais Qt a besoin de dlls –

+0

Pour autant que je sache, les versions statiques de Qt sont cassées sous MSVC 2015 et 2017 :(Votre problème n'a probablement rien à voir avec OpenSSL. Supprimez le code réseau et voyez s'il se bloque toujours. –

+0

@KubaOber mon code travaillé trouvé avec MSVC 2015 et réseau normal (http). Mais depuis que j'ai ajouté le 'libeay32.dll' et le' ssleay32.dll' au dossier d'application j'ai ces accidents en quittant l'application. – Darkproduct

Répondre

2

Voici le script que j'utilise pour construire automatiquement OpenSSL à partir d'un visuel Invite de Studio Il construira une bibliothèque 32 ou 64 bits, selon le compilateur activé.

Pré-requis (doit être dans le PATH):

  • Active Perl
  • de 7zip
  • MSNA
  • Visual Studio 2015 ou 2017 (je n'ai pas testé avec quoi que ce soit d'autre)
  • jom (facultatif)
:: Configurable Options 
:: If you have jom available, set it to jom - it speeds up the build. 
@set JOM=nmake 
:: Choose a static or dynamic build 
@set LIBTYPE=dynamic 
:: OpenSSL version in the 1.0.2 series 
@set SRC=openssl-1.0.2k 

@if "%VSCMD_ARG_TGT_ARCH%"=="x86" (
    @set BITS=32 
    @set DST=OpenSSL-Win32 
    @set CONFIG=VC-WIN32 
    @set SETUP=ms\do_nasm 
) else if "%VSCMD_ARG_TGT_ARCH%"=="x64" (
    @set BITS=64 
    @set DST=OpenSSL-Win64 
    @set CONFIG=VC-WIN64A 
    @set SETUP=ms\do_win64a 
) else goto no_vscmd 

@if "%LIBTYPE%"=="static" (
    @set LIBTYPE=nt 
) else if "%LIBTYPE%"=="dynamic" (
    @set LIBTYPE=ntdll 
) else goto no_libtype 

@echo Building %SRC% for %BITS% bits. 

@echo - Downloading 
@perl^
    -e "use LWP::Simple;"^
    -e "mirror('https://www.openssl.org/source/%SRC%.tar.gz', '%SRC%.tar.gz');" 

@echo - Decompressing 
@if not exist %SRC%.tar.gz goto no_archive 
@rmdir /S /Q %SRC% %DST% 2>NUL 
@7z x -bsp2 -y %SRC%.tar.gz >NUL &&^
7z x -bsp2 -y %SRC%.tar  >NUL &&^
del %SRC%.tar 
@if errorlevel 1 goto unpack_failed 
@if not exist %SRC% goto no_source 

@echo - Building 
@pushd %SRC% 
@perl Configure %CONFIG% --prefix=%~dp0..\%DST% &&^
call %SETUP% &&^
nmake -f ms\%LIBTYPE%.mak init &&^
%JOM% -f ms\%LIBTYPE%.mak "CC=cl /FS" &&^
%JOM% -f ms\%LIBTYPE%.mak test &&^
nmake -f ms\%LIBTYPE%.mak install || goto build_failed 
@popd 
@rmdir /S /Q %SRC% 

@echo Build has succeeded. 
@goto :eof 

:no_libtype 
@echo Error: LIBTYPE must be either "static" or "dynamic">&2 
@exit /b 1  

:no_archive 
@echo Error: can't find %SRC%.tar.gz - the download has failed :(>&2 
@exit /b 1 

:unpack_failed 
@echo Error: unpacking has failed.>&2 
@exit /b %errorlevel% 

:no_source 
@echo Error: can't find %SRC%\>&2 
@exit /b 1 

:build_failed 
@echo The build had failed.>&2 
@popd 
@exit /b 2 

:no_vscmd 
@echo Use vcvarsall x86 or vcvarsall x64 to set up the Visual Studio>&2 
@echo build environment first.>&2 
@exit /b 100 
+1

Je pense que cela devrait fonctionner correctement avec openSSL 1.0.2h pour Qt 5.8. Je l'ai installé à la main et ça marche mais malheureusement j'ai un autre problème ... – Darkproduct