我有一台单板机,带有64位ARM CPU和AES指令集。Debian8JessieMateDesktop提供的图像使用OpenSSL 1.0.1k构建,不能使用这种加速。
我从源代码构建了OpenSSL 1.0.2n,启用了加速,并将其安装到/usr/local。
这个答案解释了如何从运行良好的命令行访问它,但是如何使用这个/usr/本地版本强制所有程序和守护进程呢?
由于依赖关系(=无符号链接),无法卸载原始OpenSSL包。那么,将这两者共存并使用/usr/local的正确方法是什么呢?
注意:我知道我有责任保持/usr/local OpenSSL的更新。
发布于 2018-03-19 08:36:12
您确定应用程序还没有使用它吗?如果您检查ldconfig -v的输出,在输出中首先显示哪个OpenSSL库?
默认情况下,基于Debian的系统(我确信大多数遵循FHS的其他Linux系统)在搜索/usr/local/lib之前先搜索/usr/lib库。这意味着,自安装自己的自定义版本以来,任何使用OpenSSL的应用程序都应该在/usr/lib版本之前使用。
您可以通过在针对ldd的二进制链接上使用OpenSSL来确认这一点。例如:
$ ldd /usr/sbin/nginx
...
libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007fd50f80b000)
...注意libssl的路径-这是它将使用的版本,即使系统上有多个副本。
如果您的自定义版本的OpenSSL位于/usr/local/lib下面的目录中(例如,/usr/local/lib/ssl),并且您看到ld没有找到它,则可以将该目录添加到/etc/ld.so.conf.d中的一个新文件中并重新运行ldconfig (请确保使用-v选项,以便在定义的搜索路径中显示所有库的名称)。
发布于 2020-07-13 03:48:14
要强制使用/usr/local上的任何库,环境变量LD_LIBRARY_PATH可以如下所示:
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib这可以用
ldd /usr/bin/target-application
ldd /usr/bin/target-application | grep ssl
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib
ldd /usr/bin/target-application
ldd /usr/bin/target-application | grep ssl在设置LD_LIBRARY_PATH和验证之后,当我们启动应用程序(从同一个shell)时,它将使用位于/usr/local的库。
另外,如果目标应用程序仍然使用错误的库,我们可以使用的另一个环境变量是LD_PRELOAD。
或者,如果目标应用程序是从源代码构建的,则可以在构建过程中将其链接到目标库,下面是如何针对安装在/usr/local上的不同Openssl版本构建应用程序的示例(这是用PHPandOpenWallJohnvs.OpenSSL v1.1.1x进行的测试)
./configure --with-openssl=/usr/local CFLAGS=-I/usr/local/include
LDFLAGS=-L/usr/local/lib64 LIBS="-lpthread" \
OPENSSL_LIBS="-L/usr/local/lib64 -l:libssl.a -l:libcrypto.a -ldl -lpthread" \
OPENSSL_CFLAGS="-I/usr/local/include"https://unix.stackexchange.com/questions/432023
复制相似问题