Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Using QSslSocket with custom OpenSSL
QtWS25 Last Chance

Using QSslSocket with custom OpenSSL

Scheduled Pinned Locked Moved Unsolved General and Desktop
c++ qtopensslsslwindows 10
41 Posts 9 Posters 33.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M MChelik
    14 Sept 2016, 18:40

    @raven-worx Since QSslSocket::sslLibraryBuildVersionString() returns "OpenSSL 1.0.2g 1 Mar 2016", I downloaded OpenSSL_1.0.2g source code and compiled it, but inside bin directory there was only openssl.exe. So I copied ssleay32.dll and libeay32.dll from C:\Qt\Tools\QtCreator\bin to C:\Windows. But still I get same error, nothing changed.
    What should I do use QSslSocket? I'm really confused. I searched a lot but nothing helped.

    R Offline
    R Offline
    raven-worx
    Moderators
    wrote on 15 Sept 2016, 05:52 last edited by
    #11

    @MChelik said in Using QSslSocket with custom OpenSSL:

    So I copied ssleay32.dll and libeay32.dll from C:\Qt\Tools\QtCreator\bin to C:\Windows

    don't do that, as @SGaist said. Copy them next to your application exe instead.

    --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
    If you have a question please use the forum so others can benefit from the solution in the future

    1 Reply Last reply
    0
    • M Offline
      M Offline
      MChelik
      wrote on 16 Sept 2016, 00:21 last edited by
      #12

      Thank you SGaist. Copying next to application executable didn't help either.
      Gentlemen, let's forget my OpenSSL; forget everything. Just assume that I want to use QSslSocket and QSslCertificate. What should I do? Should I compile Qt myself? Should I install OpenSSL? What should I do exactly? Qt documents doesn't say any specific thing about this. Documents say only how to use mentioned two classes.
      Thank you

      1 Reply Last reply
      0
      • H Offline
        H Offline
        hskoglund
        wrote on 16 Sept 2016, 01:06 last edited by hskoglund
        #13

        Hi, just a quick note on OpenSSL with Qt, I think because you're building a 64-bit Qt app that's why you're having problems. Because those 2 DLLs s stored in C:\Qt\Tools\QtCreator\bin are built with MSVC2013 32-bit compiler (same as for Qt Creator itself) so they are not kosher for 64-bit :-(

        1 Reply Last reply
        2
        • S Offline
          S Offline
          SGaist
          Lifetime Qt Champion
          wrote on 16 Sept 2016, 07:33 last edited by
          #14

          To add to @hskoglund, the prebuilt packages I've mentioned earlier also provide "OpenSSL-Win64" which are pre-built for 64bit development.

          Interested in AI ? www.idiap.ch
          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          1
          • M Offline
            M Offline
            MChelik
            wrote on 17 Sept 2016, 23:51 last edited by
            #15

            @hskoglund That was my problem! I didn't pay attention to that. But I a have a question: The only libeay32.dll and ssleay32.dll files that are in my %PATH% is C:\Win64-OpenSSL\bin directory. So why my application only works when mentioned DLLs are beside my application (doesn't work when are in %PATH)?

            1 Reply Last reply
            0
            • S Offline
              S Offline
              SGaist
              Lifetime Qt Champion
              wrote on 18 Sept 2016, 20:03 last edited by
              #16

              Are you sure you don't have any other application that has these libraries and that can be found in your PATH environment variable ?

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              M 1 Reply Last reply 19 Sept 2016, 21:08
              1
              • S SGaist
                18 Sept 2016, 20:03

                Are you sure you don't have any other application that has these libraries and that can be found in your PATH environment variable ?

                M Offline
                M Offline
                MChelik
                wrote on 19 Sept 2016, 21:08 last edited by
                #17

                @SGaist No, I searched my whole disk for these DLLs. Every directory that contains these DLLs is not in %PATH.

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 19 Sept 2016, 21:57 last edited by
                  #18

                  How did you modify PATH ? In your Windows settings or in Qt Creator ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  M 1 Reply Last reply 22 Sept 2016, 23:57
                  0
                  • H Offline
                    H Offline
                    hskoglund
                    wrote on 19 Sept 2016, 22:04 last edited by
                    #19

                    Hi, also, they could be loaded via some other means than their directories being listed in %PATH%, either that some other dll that your .exe loads explicitly pulls in the bad (i.e. 32-bit) ones, or perhaps they're hiding in c:\windows or c:\windows\system32.

                    To debug this. you could try download Dependency Walker and load your app into it. Then start profiling with F7, that'll get you a trace of all the dlls loaded.

                    1 Reply Last reply
                    1
                    • N Offline
                      N Offline
                      Nalnalital
                      wrote on 20 Sept 2016, 14:31 last edited by
                      #20
                      This post is deleted!
                      N 1 Reply Last reply 20 Sept 2016, 15:12
                      0
                      • N Nalnalital
                        20 Sept 2016, 14:31

                        This post is deleted!

                        N Offline
                        N Offline
                        Nalnalital
                        wrote on 20 Sept 2016, 15:12 last edited by
                        #21
                        This post is deleted!
                        1 Reply Last reply
                        0
                        • N Offline
                          N Offline
                          Nalnalital
                          wrote on 20 Sept 2016, 15:57 last edited by Nalnalital
                          #22

                          Using Qt5.7+msvc2015+W8

                          Solved, in Qt_naming dll respect, without openssl compilation :
                          http://www.npcglib.org/~stathis/downloads/openssl-1.0.1t-vs2015.7z

                          1 Reply Last reply
                          1
                          • S SGaist
                            19 Sept 2016, 21:57

                            How did you modify PATH ? In your Windows settings or in Qt Creator ?

                            M Offline
                            M Offline
                            MChelik
                            wrote on 22 Sept 2016, 23:57 last edited by
                            #23

                            @SGaist I modified it via Windows settings and I don't know even khow how to change %PATH in Qt. Can you tell me? ( ͡° ͜ʖ ͡°)
                            @hskoglund I'll try it at work. Thank you for your solution.

                            1 Reply Last reply
                            0
                            • S Offline
                              S Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on 23 Sept 2016, 07:03 last edited by
                              #24

                              Not in Qt but within Qt Creator. Go to the Run part of the Project panel. There you can modify your environment for your application only.

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • R raven-worx
                                14 Sept 2016, 17:11

                                @MChelik
                                on windows they are called ssleay32.dll and libeay32.dll

                                R Offline
                                R Offline
                                RMcFatter
                                wrote on 28 Oct 2016, 14:30 last edited by
                                #25

                                @raven-worx Not any more. As of OpenSSL 1.1.0, following OpenSSL's build instructions on Windows (and with shared libraries enabled), we get:

                                bin/libcrypto-1_1.dll
                                bin/libssl-1_1.dll
                                lib/libcrypto.lib
                                lib/libssl.lib

                                The names "ssleay32" and "libeay32" were deprecated. So does Qt only look for the old names despite any attempts at configuring it otherwise?

                                Qt's docs on the topic, for some reason, only describe building OpenSSL for Android.

                                1 Reply Last reply
                                0
                                • S Offline
                                  S Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on 28 Oct 2016, 19:26 last edited by SGaist
                                  #26

                                  @RMcFatter
                                  Hi and welcome to devnet,

                                  From a quick look at Qt's sources, it doesn't search yet for libcrypto/ssl-1_1.

                                  That something you should check in the bug report system to see if there's already something planned for that.

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  0
                                  • O Offline
                                    O Offline
                                    Opa114
                                    wrote on 1 Nov 2016, 18:27 last edited by
                                    #27

                                    same problem here.

                                    I want to use some functions from OpenSSL which i actually can not access from the prebuilt OpenSSL Libs which are shipped with QT (libeay32.dll and ssleay32.dll);

                                    So i thought i can build OpenSSL on my own and link to these libs in my project. This works as expected, but i now have the coexistence of the prebuilt OpenSSL Libs and my own built libs (libcrypto-1_1.dll and libssl-1_1.dll)

                                    This is not a big problem, but i tghought why using these two libs together, when i can maybe use only one? So i tried to rename my own build libs to the names of the old one, but there my application is crashing whith multiple error messages:

                                    qt.network.ssl: QSslSocket: cannot resolve CRYPTO_num_locks
                                    qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_id_callback
                                    qt.network.ssl: QSslSocket: cannot resolve CRYPTO_set_locking_callback
                                    qt.network.ssl: QSslSocket: cannot resolve ERR_free_strings
                                    qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_cleanup
                                    qt.network.ssl: QSslSocket: cannot resolve EVP_CIPHER_CTX_init
                                    qt.network.ssl: QSslSocket: cannot resolve sk_new_null
                                    qt.network.ssl: QSslSocket: cannot resolve sk_push
                                    qt.network.ssl: QSslSocket: cannot resolve sk_free
                                    qt.network.ssl: QSslSocket: cannot resolve sk_num
                                    qt.network.ssl: QSslSocket: cannot resolve sk_pop_free
                                    qt.network.ssl: QSslSocket: cannot resolve sk_value
                                    qt.network.ssl: QSslSocket: cannot resolve SSL_library_init
                                    qt.network.ssl: QSslSocket: cannot resolve SSL_load_error_strings
                                    qt.network.ssl: QSslSocket: cannot resolve SSL_get_ex_new_index
                                    qt.network.ssl: QSslSocket: cannot resolve SSLv3_client_method
                                    qt.network.ssl: QSslSocket: cannot resolve SSLv23_client_method
                                    qt.network.ssl: QSslSocket: cannot resolve SSLv3_server_method
                                    qt.network.ssl: QSslSocket: cannot resolve SSLv23_server_method
                                    qt.network.ssl: QSslSocket: cannot resolve X509_STORE_CTX_get_chain
                                    qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_noconf
                                    qt.network.ssl: QSslSocket: cannot resolve OPENSSL_add_all_algorithms_conf
                                    qt.network.ssl: QSslSocket: cannot resolve SSLeay
                                    qt.network.ssl: QSslSocket: cannot resolve SSLeay_version
                                    qt.network.ssl: QSslSocket: cannot call unresolved function SSLeay
                                    qt.network.ssl: QSslSocket: cannot call unresolved function CRYPTO_num_locks
                                    qt.network.ssl: QSslSocket: cannot call unresolved function CRYPTO_set_id_callback
                                    qt.network.ssl: QSslSocket: cannot call unresolved function CRYPTO_set_locking_callback
                                    qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
                                    qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
                                    qt.network.ssl: QSslSocket: cannot call unresolved function sk_num
                                    

                                    Then i found this Thread here and hoped to get the solution, but no, like @SGaist said. So i think i have to wait for an updated Qt version so that i can replace the files. Or could it be the better solution to built Qt on my own with own OpenSSL Support? if yes, is there a good Tutorial? Or can i use ALL the OpenSSL Functions with the prebuilt OpenSSL in Qt? If yes, a little example would be nice, because i don't got it.

                                    1 Reply Last reply
                                    0
                                    • S Offline
                                      S Offline
                                      SGaist
                                      Lifetime Qt Champion
                                      wrote on 1 Nov 2016, 20:22 last edited by
                                      #28

                                      You can build Qt with the -openssl-linked option and point configure to your self-built version of OpenSSL.

                                      Interested in AI ? www.idiap.ch
                                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      0
                                      • O Offline
                                        O Offline
                                        Opa114
                                        wrote on 4 Nov 2016, 11:15 last edited by
                                        #29

                                        @SGaist said in Using QSslSocket with custom OpenSSL:

                                        You can build Qt with the -openssl-linked option and point configure to your self-built version of OpenSSL.

                                        i tried it that way, but buildung QT 5.7 with OpenSSL 1.1.0b ist not supported till QT 5.9 because in OpenSSL are some changes done, so that building QT 5.7 with that new OpenSSL version did not work. See here: https://bugreports.qt.io/browse/QTBUG-52905

                                        Then i tried it with an older version of OpenSSL (1.0.2j) - this works.

                                        But what ist the difference between building Qt gainst OpenSSL with -openssl on running the configure-command and to link against the OpenSSL headers and libs and build it inside the Project? If i build against OpenSSL i have to include the headers anyway to work with the libs if i want to use the OpenSSL specific stuff.

                                        And i noticed that i can replace the built in OpenSSL libs with the own build one. So it would be much simpler to include the ehaders of OpenSSL via INCLUDEPATH. So i get OpenSSL support = true on output of: qDebug() << QSslSocket::supportsSsl();

                                        And if print out his i got the Output which i wrote behind:
                                        qDebug() << QSslSocket::sslLibraryBuildVersionString(); // OpenSSL 1.0.2g 1 Mar 2016
                                        qDebug() << QSslSocket::sslLibraryVersionString(); // OpenSSL 1.0.2j 26 Sep 2016

                                        Why is the first one at all time: OpenSSL 1.0.2g 1 Mar 2016 - This i got, too if i build Qt at own and link against OpenSSL 1.0.2j??

                                        1 Reply Last reply
                                        0
                                        • S Offline
                                          S Offline
                                          SGaist
                                          Lifetime Qt Champion
                                          wrote on 4 Nov 2016, 19:13 last edited by
                                          #30

                                          It's in the docs:
                                          sslLibraryBuildVersionString is returning the version of the OpenSSL library used when building Qt.
                                          sslLibraryVersionString is returning the version of the OpenSSL library used at run time.

                                          By default OpenSSL is dlopened because some countries have restrictions about encryption related software and OpenSSL can't be distributed just like that.

                                          Interested in AI ? www.idiap.ch
                                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved