최신 openssl로 컬을 만드는 방법은 무엇입니까?


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.1g 대신 1.0.1f)을 사용합니다.

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 

컬을 새로운 버전으로 사용하는 방법?

이상한 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

성공하지 못했습니다 ...

답변:


13

OpenSSL이 설치된 디렉토리를 지정해야합니다 (symlink가 필요하지도 않고 충분하지도 않습니다)

./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없이 curl을 구성합니다
Peter

디렉토리가 약간 잘못되었을 수 있습니다. 지금 Linux 상자에 액세스 할 수 없습니다 ... 기본적으로 수동 OpenSSL 설치 파일을 openssl.pc어딘가에 넣으십시오 PKG_CONFIG_PATH. 해당 파일이있는 디렉토리 를 가리켜 야 합니다 (및 당신은 pkg-config) 물론, 설치.
fkraiem 2016 년

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

@ bodhi.zazen 공식 저장소에서 우분투 패키지를 설치하고 openssl을 컴파일했습니다/usr/local/ssl
Peter

5

내가 똑같은 연습을 할 때 컬이 단순히 openssl 정적 라이브러리와 함께 작동 할 수 없다는 것을 알았습니다. 내가하는 일에 관계없이 항상 역동적 인 검색을하고 있었기 때문에 결국 3 가지 일을했습니다.

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 버전을 표시합니다. curl이 올바른 libcurl 버전을 사용하도록 LD_LIBRARY_PATH에 / usr / local / lib를 추가했습니다.


이것은 특히 LD_LIBRARY_PATHbash_profile에 추가 한 도움 이되었습니다. 나는 비슷한 것을했지만 첫 번째 줄 대신 export CFLAGS=-fPIC; ./config shared(공유 가능하지 않음)을 사용했습니다. curl의 --with-ssl=/usr/local/ssl경우 경로 인수가 중복되었을 수 있지만 사용했습니다 .
mahemoff

1
제공 한 것이 빌드의 기본 위치이기 때문에 --with-ssl의 경로는 중복됩니다.
Oleg Gryb

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

우분투 15.04에서 curl 7.43을 빌드하는 데 필요한 전부입니까?


4

이것은 길고 힘든 길이었습니다. 시간과 시간 (어떻게 알고 있는지). 내가 찾은 것은 다음과 같습니다.

를 들어 우분투 12.04 / 14.04 당신은 할 필요가 수동으로 모두 설치 하려면 openssl컬을

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 

인용 : opennssl


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

몇 시간 동안 고생 한 후 우분투 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

openssl use default configure를 컴파일 하면 정적 라이브러리 만 생성 되므로 정적 라이브러리를 curl로 사용하려면 다음과 같이하십시오.

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

나는 여기 에서 답을 찾았다 .

참고 :이 방법을 따르면 컬 정적 라이브러리 만 생성합니다.


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 선택 사항입니다. 그냥 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.