Build OpenVPN with specific OpenSSL version

匿名 (未验证) 提交于 2019-12-03 01:57:01

问题:

Similar questions have been asked before, but the answers no longer seem to apply as the flags have changed for the configure script. I am trying to compile OpenVPN from the git source on Ubuntu 14.04.5 on both x86 and x64. I have OpenSSL 1.0.1t built and installed to /usr/local/ssl. I've tried various combinations of the configure options and the compiler seems to recognize since

./configure OPENSSL_LIBS="-L/usr/local/ssl/ -lssl -lcrypto" OPENSSL_CFLAGS="-I/usr/local/ssl/include/" 

finishes with no errors, but ./configure OPENSSL_LIBS="-L/usr/local/ssl/" OPENSSL_CFLAGS="-I/usr/local/ssl/include/" results in configure: error: openssl check failed. Once you do make and make install, it still reports the system version of OpenSSL:

root@anonymous:/usr/local/src/openvpn# openvpn --version OpenVPN 2.3_git [git:master/d1bd37fd508ee046] x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH] [IPv6] built on Aug 16 2016 library versions: OpenSSL 1.0.1f 6 Jan 2014, LZO 2.06 Originally developed by James Yonan Copyright (C) 2002-2010 OpenVPN Technologies, Inc.  Compile time defines: enable_async_push=no enable_comp_stub=no enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_iproute2=no enable_libtool_lock=yes enable_lz4=yes enable_lzo=yes enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no enable_pf=yes enable_pkcs11=no enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no  enable_werror=no enable_win32_dll=yes enable_x509_alt_username=no with_crypto_library=openssl with_gnu_ld=yes with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no 

System OpenSSL:

root@anonymous:/usr/local/src/openvpn# openssl version  OpenSSL 1.0.1f 6 Jan 2014 

Compiled OpenSSL:

root@anonymous:/usr/local/ssl/bin# ./openssl version  OpenSSL 1.0.1t  3 May 2016 

I know it has to be something simple, but I saw other users asking about this on the OpenVPN Forums with no responses as of yet.

回答1:

Below is the procedure I used to build OpenVPN with OpenSSL 1.0.2. OpenSSL 1.0.1 vs. 1.0.2 vs. 1.1.0 should not matter. However, some Confugre scripts dies on OpenSSL 1.1.0 because 1.1.0 uses OPENSSL_init_ssl rather than SSL_library_init. Note the use of RPATH's on Linux (OS X would use a different technique).

OpenSSL configuration options are mostly documented at Compilation and Installation | Configure Options on their wiki. I did not find similar for OpenVPN, and ./configure --help was not very helpful. Often, for an Autools project, you need to --with-ssl=, but OpenVPN does not appear to have that option. For OpenVPN, the process below went adhoc using Autools CFLAGS.

Both libraries disabled compression because it can leak information. For more details, see Spot me if you can: Uncovering spoken phrases in encrypted VoIP conversations. The problem is the variable bit rate encoding, and the fundamental design is prevalent in other compression libraries (like zlib).

OpenSSL 1.0.2

$ wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz $ tar xzf openssl-1.0.2h.tar.gz $ cd openssl-1.0.2h  $ ./config shared no-ssl2 no-ssl3 no-comp enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/ssl/lib --prefix=/usr/local/ssl $ make -j 4 $ make test $ sudo make install 

You can check the openssl program is using the expected shared objects with:

$ ldd /usr/local/ssl/bin/openssl     linux-vdso.so.1 =>  (0x00007ffc36578000)     libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f94b48fb000)     libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f94b448b000)     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f94b40c6000)     libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f94b3ec2000)     /lib64/ld-linux-x86-64.so.2 (0x00007f94b4b6c000) 

You can also make sure the new openssl is on-path with the following. Its not required for your issue, however.

$ sudo ln -s /usr/local/ssl/bin/openssl /usr/local/bin/openssl $ which openssl /usr/local/bin/openssl 

OpenVPN 2.3.11

$ wget https://swupdate.openvpn.org/community/releases/openvpn-2.3.11.tar.gz $ tar xzf openvpn-2.3.11.tar.gz $ cd openvpn-2.3.11  $ CFLAGS="-I/usr/local/ssl/include -Wl,-rpath=/usr/local/ssl/lib -L/usr/local/ssl/lib" ./configure --disable-lzo $ make -j 4 

Next, check the OpenVPN program to see what its linking to:

$ find . -type f -name openvpn ./src/openvpn/openvpn $ ldd ./src/openvpn/openvpn     linux-vdso.so.1 =>  (0x00007ffc8bfc4000)     libssl.so.1.0.0 => /usr/local/ssl/lib/libssl.so.1.0.0 (0x00007f74f49f3000)     libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0 (0x00007f74f4583000)     libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f74f437f000)     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f74f3fba000)     /lib64/ld-linux-x86-64.so.2 (0x00007f74f4c64000) 

Next, run the self tests:

$ make check ... make[3]: Entering directory `/home/jwalton/openvpn-2.3.11/tests' ./t_client.sh: cannot find 't_client.rc' in build dir ('..') ./t_client.sh: or source directory ('.'). SKIPPING TEST. SKIP: t_client.sh Testing cipher AES-128-CBC... OK Testing cipher AES-128-CFB... OK Testing cipher AES-128-CFB1... OK ... 

Install OpenVPN if it tests OK:

$ sudo make install $ command -v openvpn /usr/local/sbin/openvpn 

Finally, check it:

$ /usr/local/sbin/openvpn --version OpenVPN 2.3.11 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [EPOLL] [MH] [IPv6] built on Aug 17 2016 library versions: OpenSSL 1.0.2h  3 May 2016 Originally developed by James Yonan Copyright (C) 2002-2010 OpenVPN Technologies, Inc.  ... 

If interested, you can find a build script to automate the process at Noloader | Build-Scripts. It includes one for OpenVPN.



回答2:

OpenVPN reports the version of the runtime library, so what you are seeing here is linking/dynamic library behaviour. Probably your ld.so.conf is setup to prefer /usr/lib/.so over /usr/local/lib/.so



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!