以前也问过类似的问题,但由于配置脚本的标志已更改,因此答案似乎不再适用。我正在尝试在x86和x64上从Ubuntu14.04.5上的git源代码编译OpenVPN。我构建了OpenSSL 1.0.1t,并将其安装到/usr/local/ssl。我尝试了配置选项的各种组合,编译器似乎可以识别出
./configure OPENSSL_LIBS="-L/usr/local/ssl/ -lssl -lcrypto" OPENSSL_CFLAGS="-I/usr/local/ssl/include/"
在没有错误的情况下结束,但是./configure OPENSSL_LIBS="-L/usr/local/ssl/" OPENSSL_CFLAGS="-I/usr/local/ssl/include/"
会导致configure: error: openssl check failed
。一旦进行了make和make install,它仍然会报告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. <sales@openvpn.net>
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
系统OpenSSL:
root@anonymous:/usr/local/src/openvpn# openssl version
OpenSSL 1.0.1f 6 Jan 2014
编译后的OpenSSL:
root@anonymous:/usr/local/ssl/bin# ./openssl version
OpenSSL 1.0.1t 3 May 2016
我知道它必须是简单的,但我看到其他用户在OpenVPN论坛上询问这个问题,到目前为止还没有回应。
发布于 2016-08-18 05:03:33
下面是我用OpenSSL 1.0.2构建OpenVPN的过程。OpenSSL 1.0.1和1.0.2还是1.1.0应该无关紧要。然而,一些配置脚本在OpenSSL 1.1.0上死掉了,因为1.1.0使用的是OPENSSL_init_ssl
而不是SSL_library_init
。请注意Linux上RPATH的使用(OS将使用不同的技术)。
Compilation and Installation | Configure Options在其维基上提供了大部分OpenSSL配置选项的文档。我没有发现类似的OpenVPN,而且./configure --help
也没有多大帮助。通常,对于Autools项目,您需要--with-ssl=<path to ssl root>
,但是OpenVPN似乎没有这个选项。对于OpenVPN,下面的过程使用Autools CFLAGS
进行即席。
这两个库都禁用了压缩,因为它可能会泄漏信息。有关详细信息,请参阅Spot me if you can: Uncovering spoken phrases in encrypted VoIP conversations。问题是可变比特率编码,基本设计在其他压缩库(如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
# clear program cache
$ hash -r
您可以使用以下命令检查openssl
程序是否正在使用预期的共享对象:
$ 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)
您还可以使用以下内容确保新的openssl
在path上。然而,对于您的问题,这并不是必需的。
$ sudo ln -s /usr/local/ssl/bin/openssl /usr/local/bin/openssl
$ hash -r
$ command -v 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
接下来,检查OpenVPN程序以查看它所链接的内容:
$ 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)
接下来,运行自检:
$ 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
...
如果测试正常,请安装OpenVPN:
$ sudo make install
$ hash -r
$ command -v openvpn
/usr/local/sbin/openvpn
最后,检查它:
$ /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. <sales@openvpn.net>
...
如果感兴趣,您可以在Noloader | Build-Scripts上找到一个构建脚本来自动执行此过程。它包括一个用于OpenVPN的。
发布于 2016-08-17 17:07:28
OpenVPN报告运行时库的版本,所以您在这里看到的是链接/动态库行为。可能您的ld.so.conf设置为首选/usr/lib/.so而不是/usr/local/lib/.so
发布于 2018-05-24 04:15:51
我成功使用的一个解决方案是OpenVPN build-system
只需在generic/build.vars
中更改OpenSSL源代码版本并将其释放(如文档所示)
如果您在使用--dynamicbase
或--nxcompat
等选项时遇到问题,那么也可以在generic/build.vars
中禁用这些标志
https://stackoverflow.com/questions/38985889
复制相似问题