компиляция curl с openssl, дающая неправильную версию openssl

Я нашел различные ответы на это, но я не могу получить ничего, что сработает для меня. Я пытаюсь скомпилировать curl с nghttp2 на моем сервере CentOS.

Я скомпилировал все в порядке, но моя проблема в том, что curl -V показывает неверную версию openssl:

 curl 7.51.0-DEV (x86_64-unknown-linux-gnu) libcurl/7.51.0-DEV OpenSSL/1.0.1e zlib/1.2.3 nghttp2/1.16.0-DEV Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IPv6 Largefile NTLM NTLM_WB SSL libz HTTP2 UnixSockets 

Когда я openssl version , он сообщает:

 OpenSSL 1.0.2h 3 May 2016 

Может ли кто-нибудь помочь мне исправить это, пожалуйста (я здесь, из своей зоны комфорта!)? Насколько я понимаю, http2 работает неправильно, потому что openssl должен быть 1.0.2.

благодаря

РЕДАКТИРОВАТЬ

Я попытался изменить мою настройку на это:

 ./configure --with-nghttp2=/usr/local --with-ssl=/var/tmp/openssl-1.0.2h CPPFLAGS="-I/var/tmp/openssl-1.0.2h/include/openssl" LDFLAGS="-L/var/tmp/openssl-1.0.2h" 

Но теперь настройка не завершена:

 error: one or more libs available at link-time are not available run-time. Libs used at link-time: -lnghttp2 -lssl -lcrypto -lz -lrt 

Проблема, безусловно, --without-ssl openssl, так как я могу настроить ok с помощью --without-ssl . Полагаю, мои пути должны быть неправильными – но я не уверен, на что они должны ссылаться?

  • OpenSSL s_client не обнаруживает STARTTLS
  • Сделать SSL-сертификат доверенным в браузере через SSL Bump Squid
  • RHEL6 openssl + httpd путаница
  • openssl-1.0.1e компиляция на Debian
  • Можно ли расшифровать один изолированный сектор dm-crypt (возможно, используя OpenSSL)?
  • FTP через SSL в AIX (UNIX)
  • как обновить версию cURL openssl для PayPal IPN
  • Linux openssl CN / проверка имени хоста против SSL-сертификата
  • One Solution collect form web for “компиляция curl с openssl, дающая неправильную версию openssl”

    Я думаю, что трюк здесь заключается в том, что вы должны использовать все три компонента (OpenSSL, ngHTTP и cURL) для использования недавно построенного OpenSSL. Самый простой способ – использовать RPATH, а его -Wl,-rpath,/usr/local/lib показан удар.

    Построить OpenSSL

    OpenSSL не соблюдает CFLAGS , поэтому вам нужно добавить -Wl,-rpath,/usr/local/lib в вашу строку конфигурации. Он объясняет такие флаги, как ec_nistp_64_gcc_128 .

    Также см. Компиляцию и установку в вики OpenSSL.

     $ wget https://www.openssl.org/source/openssl-1.1.0b.tar.gz $ tar xzf openssl-1.1.0b.tar.gz $ cd openssl-1.1.0b $ ./Configure linux-x86_64 shared no-ssl2 no-ssl3 no-comp enable-ec_nistp_64_gcc_128 -Wl,-rpath,/usr/local/lib Configuring OpenSSL version 1.1.0b (0x0x1010002fL) ***** Deprecated options: no-ssl2 ... SIXTY_FOUR_BIT_LONG mode Configured for linux-x86_64. $ make -j 4 ... $ sudo make install ... $ /usr/local/bin/openssl version OpenSSL 1.1.0b 26 Sep 2016 $ ldd /usr/local/bin/openssl linux-vdso.so.1 => (0x00007ffcd27e0000) libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007fe8f8740000) libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007fe8f8294000) ... 

    CFLAGS и CXXFLAGS

    Теперь, когда новый OpenSSL доступен, вам понадобятся остальные компоненты для его использования. Меньшая морщина ngHTTP использует как gcc и g++ , поэтому вам нужно настроить как CFLAGS и CXXFLAGS .

    Лично я не CPPFLAGS с CPPFLAGS , который является флагом для препроцессора C. Его задача драйвера компилятора, когда требуется, передать их препроцессору.

     $ export CFLAGS="-I/usr/local/include/ -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lssl -lcrypto" $ export CXXFLAGS="-I/usr/local/include/ -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lssl -lcrypto" 

    Построить nghttp2

    Здесь особый пункт устанавливает как CFLAGS и CXXFLAGS .

     $ wget https://github.com/nghttp2/nghttp2/releases/download/v1.16.0/nghttp2-1.16.0.tar.gz $ tar xzf nghttp2-1.16.0.tar.gz $ cd nghttp2-1.16.0 $ CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" ./configure ... Compiler: C compiler: gcc CFLAGS: -I/usr/local/include/ -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lssl -lcrypto LDFLAGS: C++ compiler: g++ CXXFLAGS: -I/usr/local/include/ -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lssl -lcrypto ... Libs: OpenSSL: yes (CFLAGS='-I/usr/local/include' LIBS='-L/usr/local/lib -lssl -lcrypto') ... $ make -j 4 ... $ sudo make install ... Libraries have been installed in: /usr/local/lib ... 

    Построить cURL

    Здесь нет ничего особенного. cURL также будет использовать CFLAGS .

     $ wget https://curl.haxx.se/download/curl-7.51.0.tar.gz $ tar xzf curl-7.51.0.tar.gz $ cd curl-7.51.0 $ ./configure --help | egrep '(ssl|tls|nghttp2)' --enable-tls-srp Enable TLS-SRP authentication --disable-tls-srp Disable TLS-SRP authentication --with-winssl enable Windows native SSL/TLS --without-winssl disable Windows native SSL/TLS --with-darwinssl enable Apple OS native SSL/TLS --without-darwinssl disable Apple OS native SSL/TLS --with-ssl=PATH Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when --without-ssl disable OpenSSL --with-gnutls=PATH where to look for GnuTLS, PATH points to the --without-gnutls disable GnuTLS detection --with-polarssl=PATH where to look for PolarSSL, PATH points to the --without-polarssl disable PolarSSL detection --with-mbedtls=PATH where to look for mbedTLS, PATH points to the --without-mbedtls disable mbedTLS detection --with-cyassl=PATH where to look for CyaSSL, PATH points to the --without-cyassl disable CyaSSL detection --with-axtls=PATH Where to look for axTLS, PATH points to the axTLS --without-axtls disable axTLS --with-nghttp2=PATH Enable nghttp2 usage --without-nghttp2 Disable nghttp2 usage $ ./configure --with-ssl=/usr/local --with-nghttp2=/usr/local checking whether to enable maintainer-specific portions of Makefiles... no checking whether make supports nested variables... yes ... checking for egrep... /bin/grep -E checking for ar... /usr/bin/ar configure: using CFLAGS: -I/usr/local/include/ -L/usr/local/lib -Wl,-rpath,/usr/local/lib -lssl -lcrypto ... configure: Configured to build curl/libcurl: curl version: 7.51.0 Host setup: x86_64-pc-linux-gnu Install prefix: /usr/local Compiler: gcc SSL support: enabled (OpenSSL) SSH support: no (--with-libssh2) zlib support: no (--with-zlib) GSS-API support: no (--with-gssapi) TLS-SRP support: enabled resolver: default (--enable-ares / --enable-threaded-resolver) IPv6 support: enabled Unix sockets support: enabled IDN support: no (--with-{libidn2,winidn}) Build libcurl: Shared=yes, Static=yes Built-in manual: enabled --libcurl option: enabled (--disable-libcurl-option) Verbose errors: enabled (--disable-verbose) SSPI support: no (--enable-sspi) ca cert bundle: /etc/ssl/certs/ca-certificates.crt ca cert path: no ca fallback: no LDAP support: no (--enable-ldap / --with-ldap-lib / --with-lber-lib) LDAPS support: no (--enable-ldaps) RTSP support: enabled RTMP support: no (--with-librtmp) metalink support: no (--with-libmetalink) PSL support: no (libpsl not found) HTTP2 support: enabled (nghttp2) Protocols: DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS POP3 POP3S RTSP SMB SMBS SMTP SMTPS TELNET TFTP $ make -j 4 ... $ sudo make install ... 

    Проверка библиотек

    После всех обручей проверьте вещи. Особенно важно RPATH, поэтому вам не нужно тратить время на LD_LIBRARY_PATH . -Wl,-rpath,/usr/local/lib гарантирует, что путь с соответствующими общими объектами будет набран в исполняемый файл.

     $ which curl /usr/local/bin/curl $ ldd /usr/local/bin/curl linux-vdso.so.1 => (0x00007ffcd0ffd000) libcurl.so.4 => /usr/local/lib/libcurl.so.4 (0x00007f86ad8a4000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f86ad4c4000) libnghttp2.so.14 => /usr/local/lib/libnghttp2.so.14 (0x00007f86ad293000) libssl.so.1.1 => /usr/local/lib/libssl.so.1.1 (0x00007f86ad025000) libcrypto.so.1.1 => /usr/local/lib/libcrypto.so.1.1 (0x00007f86acb79000) /lib64/ld-linux-x86-64.so.2 (0x0000560d3d474000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f86ac95b000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f86ac757000) 

    В заключение:

     $ /usr/local/bin/curl -V curl 7.51.0 (x86_64-pc-linux-gnu) libcurl/7.51.0 OpenSSL/1.1.0b nghttp2/1.16.0 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IPv6 Largefile NTLM NTLM_WB SSL TLS-SRP HTTP2 UnixSockets 

    Вы можете очистить:

     $ cd .. $ rm -rf curl-7.51.0* nghttp2-1.16.0* openssl-1.1.0b* ... 
    Linux и Unix - лучшая ОС в мире.