Apache重新编译没有find新的OpenSSL

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

这是我的configuration命令:

./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 ,所以我不能使用端口进行编译。

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

其次,不要从下载的源代码编译Apache。 你在乞求麻烦,不要惊讶,你已经find了。 使用ports树。 即使您想要使用Ports树中的不同版本的软件,也要了解如何修改您所需版本的本地树。

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

查看它正在使用的libssl.so,以及它将从哪里加载。 确保你在那个地方有最新的OpenSSL库。

从端口构buildApache时,应始终针对安装的OpenSSL版本( /usr/local/lib libssl.so)进行构build。 由于情况并非如此,任何人都会猜测它正在加载什么。

您可能需要考虑修复您的端口集合。 如果您运行的是不受支持的版本,则可能无法获取所需端口的最新版本。 否则,您可以按照手册中有关如何使用portsnap获取最新端口集合的说明。

一种解决方法是在configurationapache时使用rpath,即:

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

安装apache后validation:

 $ 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) ...