当前位置: 首页 > 面试题库 >

使用特定的OpenSSL版本构建OpenVPN

颜嘉誉
2023-03-14
问题内容

之前也曾提出过类似的问题,但由于配置脚本的标志已更改,因此答案似乎不再适用。我正在尝试从x86和x64上的Ubuntu
14.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。完成安装后,它仍会报告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论坛上看到其他用户对此提出了疑问,但到目前为止还没有任何答复。


问题答案:

以下是我使用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
X将使用另一种技术)。

OpenSSL配置选项大部分记录在《编译和安装》中。在其Wiki上配置选项。我并
没有 找到OpenVPN的相似,./configure --help是不是非常有帮助。通常,对于Autools项目,您需要--with- ssl=<path to ssl root>,但是OpenVPN似乎没有该选项。对于OpenVPN,以下过程使用Autools进行了专门的处理CFLAGS

这两个库都禁用了压缩,因为它可能泄漏信息。有关更多详细信息,如果可以,请参阅发现我:在加密的VoIP对话中发现口头短语。问题是可变比特率编码,基本设计在其他压缩库(如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的路径正常。但是,它不是您的问题所必需的。

$ 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 | Java中找到一个构建脚本来自动执行该过程。构建脚本。它包括一个用于OpenVPN的服务器。



 类似资料:
  • 问题内容: 我有多个版本的Python。我需要为我的项目创建一个virtualenv,并确保它使用的是Python 2.7。 我已经试过的组合来完成此本指南为Windows和此SO岗位上具有特定类型的Python。 不幸的是,它无法正常工作,这可能是因为后者是由使用Linux的人编写的。 这是我所做的: operable program or batch file. 无法将“ virtualenv

  • 问题内容: 我正在评估Bazel并尝试对其进行配置,以便它使用与构建时所用的JDK不同的JDK来构建和测试我的Scala项目。 这些是my输出的相关行: 尽管我的软件包管理器似乎已经使用openjdk的较新版本构建了Bazel,但我要构建/测试的项目应改用我在以下位置安装的JDK 。 通过深入研究各种github问题,最终得到了以下解决方案,该解决方案使我能够获得绿色版本: 但是,我仍然对以下内容

  • 我正在评估Bazel,并试图对它进行配置,以便它使用不同的JDK来构建和测试我的scala项目。 以下是我的输出中的相关行: 虽然我的包管理器似乎使用了相当新版本的openjdk构建了Bazel,但我要构建/测试的项目应该使用我在下安装的JDK。 通过深入研究github的各种问题,我最终得到了以下解决方案,它允许我获得一个绿色构建: null

  • Android新构建系统需要Gradle 1.10+版本。如何在内部配置?

  • 6.7 多种定制的版本 有些情况下,人们想基于不同的标准创建同一应用的几个不同的版本。 例如,Google Play 里的 multi-apk 支持4种不同的过滤器。为每一个过滤器创建不同的 APK 就需要用到多维度的 Product Flavor了。 考虑到一个游戏有一个演示版本和一个付费版本,并且在 multi-apk 支持中需要用到 ABI 过滤器。3个 ABI 和两个版本的情况下,就会有6

  • 在太平洋标准时间每天午夜会自动构建TypeScript的master分支代码并发布到NPM和NuGet上。 下面将介绍如何获得并在工具里使用它们。 使用 npm npm install -g typescript@next 使用 NuGet 和 MSBuild 注意:你需要配置工程来使用NuGet包。 详细信息参考配置MSBuild工程来使用NuGet。 www.myget.org。 有两个包: