Apache 重新编译未找到新的 OpenSSL

Apache 重新编译未找到新的 OpenSSL

我正在尝试同时升级 Apache 和 OpenSSL。我已经用我需要的所有模块编译了 Apache,它弹出并运行,但仍然显示旧版本的 OpenSSL。

这是我的配置命令:

./configure --prefix=/usr/local/apache2.2.24/ --with-ssl=/usr/local/openssl-1.0.1e/ --enable-mods-shared="all [sic] ssl rewrite"

该目录中的 OpenSSL 是正确的:

$ /usr/local/openssl-1.0.1e/bin/openssl version
OpenSSL 1.0.1e 11 Feb 2013

然而,当我查询服务器时,我仍然在标头中收到旧版本的 OpenSSL:

$ curl -I http://www.mydomain.com/
HTTP/1.1 200 OK
Date: Thu, 09 May 2013 14:51:59 GMT
Server: Apache/2.2.24 (Unix) DAV/2 mod_ssl/2.2.24 OpenSSL/1.0.0g

在过去的几天里,我已经重新编译了几百次,但还是搞不清楚我遗漏了什么。每个目录都已被删除并从头开始创建(包括我正在编译的源目录)。

该系统是旧版本的 FreeBSD,ports安装已损坏,因此我无法使用端口进行编译。

答案1

首先,修复您的 PORTS -rm -rf /usr/ports如果需要的话。这不会损害已安装的软件。使用portsnap可轻松获取新的 ports 树副本。高级用户可以使用svn

其次,不要从下载的源代码编译 Apache。您只会自找麻烦,而且您不应该对遇到麻烦感到惊讶。使用 ports 树。即使您想使用 Ports 树中不同版本的软件,也要学习如何修改本地树以获得所需的版本。

针对 mod_ssl.so 文件运行ldd,因为您正在编译下载的源,所以安装方向可能是非标准的(这意味着您系统的未来管理员将无法轻松找到该目录)。

查看它正在使用什么 libssl.so,以及它将从哪里加载。确保在该位置拥有最新的 OpenSSL 库。

当您从 ports 构建 Apache 时,它​​应该始终针对 OpenSSL 的 ports 安装版本(libssl.so in /usr/local/lib)进行构建。由于情况并非如此,因此任何人都无法猜测它正在加载什么。

答案2

您可能要考虑修复您的 ports collection。如果您运行的是不受支持的版本,您可能无法获取所需 ports 的最新版本。否则,您可以按照手册中的说明获取最新portsnap的 ports collection。

答案3

一种解决方法是在配置 apache 时使用 rpath,即:

$ LDFLAGS=-Wl,-rpath=/opt/openssl/lib ./configure ...

安装apache后验证:

$ ldd /opt/apache-httpd/modules/mod_ssl.so
...
    libssl.so.1.0.0 => /opt/openssl/lib/libssl.so.1.0.0 (0x00007fdd56278000)
    libcrypto.so.1.0.0 => /opt/openssl/lib/libcrypto.so.1.0.0 (0x00007fdd55e9c000)
...

相关内容