如何使用最新的openssl构建curl?


18

所以我建立openssl

./config
make
sudo make install
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl`

我卷发

./configure --with-ssl 
make
make install

OpenSSL看起来已正确安装:

openssl version
OpenSSL 1.0.1g 7 Apr 2014

但是curl使用旧的openssl版本(1.0.1f而不是1.0.1g):

curl --version
curl 7.37.0 (x86_64-unknown-linux-gnu) libcurl/7.37.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 libssh2/1.4.3 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP 

如何使curl使用新版本?

我想尝试最新版本,因为我正在解决一些奇怪的openssl / curl错误#1 #2

编辑:我也尝试过./configure --with-ssl=/usr/local/ssl/include/openssl,没有成功

Edit2:到目前为止,我还尝试过:

  • sudo ./configure --with-ssl --with-libssl-prefix=/usr/local/ssl
  • ./configure --with-ssl=/usr/local/ssl
  • PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure
  • PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --with-ssl
  • PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --with-ssl=/usr/local/ssl/include/openssl

没有成功...

Answers:


13

您需要指定安装OpenSSL的目录(您的符号链接既不必要也不充分)

./configure --with-ssl=/usr/local/ssl

编辑:或者,您可以设置PKG_CONFIG_PATH环境变量(由提示./configure --help):

PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure


1
第一个选项给我,configure: error: OpenSSL libs and/or directories were not found where specified!请看我的编辑-没有错误,--with-ssl=/usr/local/ssl/include/openssl但使用的是旧的openssl。第二个选项配置卷曲而不HTTPS
彼得

我可能已将目录稍微弄错了,我现在无法访问Linux盒...基本上,您的手动OpenSSL安装将文件openssl.pc放在某个位置,您需要指向PKG_CONFIG_PATH该文件所在的目录(并确保您已经pkg-config安装了)。
fkraiem 2014年

1
PKG_CONFIG_PATH路径正确,我也安装了pkg-config,但是以某种方式不起作用。如果--with-ssl没有HTTPS,--with-ssl则会引发错误configure: error: OpenSSL libs and/or directories were not found where specified!
彼得

您在哪里以及如何安装ssl?使用正确的路径。
Panther 2014年

@ bodhi.zazen我已经从官方存储库安装了Ubuntu软件包,并在以下位置编译了openssl/usr/local/ssl
Peter

5

当我进行相同的练习时,我发现curl根本无法与openssl静态库一起使用。无论我在做什么,它总是在寻找动态,所以最终我做了三件事对我有用

Configured openssl with enable-shared: ./config enable-shared
Configured curl with openssl: ./configure --with-ssl
Used LD_LIBRARY_PATH: LD_LIBRARY_PATH=/usr/local/lib:/usr/local/ssl/lib /usr/local/bin/curl -V

后面带有-V标志的命令将显示curl使用的openssl版本。我已将/ usr / local / lib添加到LD_LIBRARY_PATH中,以确保curl使用正确的libcurl版本。


这对我有所帮助,特别LD_LIBRARY_PATH是我添加到bash_profile中的内容。我做了类似的事情,但是我使用了第一行export CFLAGS=-fPIC; ./config shared(而不是启用共享),而不是第一行。对于curl,--with-ssl=/usr/local/ssl尽管路径arg可能是多余的,但我还是使用了。
mahemoff 2015年

1
我很高兴它为您服务,是的,--with-ssl中的路径是多余的,因为您提供的是构建的默认位置。
Oleg Gryb 2015年

5
sudo apt-get install libssl-dev
./configure --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

我需要在Ubuntu 15.04上构建curl 7.43吗?


4

对我来说,这是一条漫长而艰巨的道路。几个小时(你知道怎么回事)。这是我发现的:

对于Ubuntu 12.04 / 14.04,您必须手动安装opensslcurl

手动安装openssl 1.0.2g:

sudo apt-get install make # (Install compiling library Make)
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz # (Download the latest OpenSSL 1.0.2g binaries)
tar -xzvf openssl-1.0.2g.tar.gz # (Extract the tar ball to the local directory)
cd openssl-1.0.2g # (Enter extracted OpenSSL directory)
sudo ./config # (Configure binaries for compiling)
sudo make install # (install configured binaries)
sudo ln -sf /usr/local/ssl/bin/openssl `which openssl` # (This will create a sym link to the new binaries)
openssl version -v

如果您想使用NGHTTP2(可选/推荐):

# Get build requirements
# Some of these are used for the Python bindings
# this package also installs
sudo apt-get install g++ make binutils autoconf automake autotools-dev libtool pkg-config \
  zlib1g-dev libcunit1-dev libssl-dev libxml2-dev libev-dev libevent-dev libjansson-dev \
  libjemalloc-dev cython python3-dev python-setuptools

# Build nghttp2 from source
git clone https://github.com/tatsuhiro-t/nghttp2.git
cd nghttp2
autoreconf -i
automake
autoconf
./configure
make
sudo make install

手动安装curl:

cd ~
sudo apt-get build-dep curl
wget http://curl.haxx.se/download/curl-7.46.0.tar.bz2
tar -xvjf curl-7.46.0.tar.bz2
cd curl-7.46.0
./configure --with-nghttp2 --with-ssl --with-libssl-prefix=/usr/local/ssl # This is the line I had the most trouble with, especially figure out --with-libssl-prefix
make
sudo make install
sudo ldconfig

最后步骤

$ sudo ldconfig
$ sudo service apache2 restart # if you're using apache

既然完成了,请尝试$ curl --version确保在那里看到正确版本的openssl。特别是openssl> = 1.0.2g(如果选择,则为nghttp2)

$ curl --version
curl 7.50.2 (x86_64-pc-linux-gnu) libcurl/7.50.2 OpenSSL/1.0.2k zlib/1.2.8 nghttp2/1.21.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 TLS-SRP HTTP2 UnixSockets 

引用文献:curl opennssl


2
./configure --with-ssl=/usr/lib/ssl --libdir=/usr/lib/x86_64-linux-gnu
sudo make
sudo make install

经过几个小时的努力后,我设法在Ubuntu 15.05中使用libcurl 7.38启用了https


1

我设法使用静态OpenSSL库编译curl。这是tl; dr版本:

的OpenSSL

./config no-shared --prefix=$PWD/_installdir
make depend && make && make install

卷曲

LIBS="-ldl" ./configure --prefix=$PWD/_installdir --with-ssl=/something/opensslrootdir/_installdir --disable-shared
make && make install

LIBS="-ldl"部分至关重要。


0

使用defaultconfig编译openssl仅使用default configure 生成静态库,因此,如果要在curl中使用静态库,可以执行以下操作:

LIBS="-ldl -lpthread" ./configure --disable-shared --prefix=/usr/local/curl --with-ssl=/usr/local/ssl

我从这里寻求答案。

注意:按照这种方式只会生成curl静态库。


0

我通常遵循Jacksonkr的回答,但是我需要其他人一起提到的所有上述内容:

LIBS="-ldl" PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig ./configure --with-ssl --with-libssl-prefix=/usr/local/ssl --disable-shared

--disable-shared 我猜是可选的;只是我需要它

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.