无法通过OpenSSL支持获得Apache 2.2.21编译

好的 – 在这里用几天的时间在CentOS 5.7上编译Apache 2.2.21,使用下面的configuration命令:

./configure --enable-ssl=shared --with-ssl=/usr/local/openssl 

我从源代码源OpenSSL 1.0.0e编译:

 ./config --prefix=/usr/local --openssldir=/usr/local/openssl shared zlib-dynamic 

我尝试启动Apache并返回:

httpd: Syntax error on line 54 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: SSL_get_servername

如果我看看这些图书馆是如何联系的,那么这就是我所得到的:

[root@web1 modules]# ldd mod_ssl.so libssl.so.6 => /lib64/libssl.so.6 (0x00002aaaaace4000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002aaaaaf30000) libdl.so.2 => /lib64/libdl.so.2 (0x00002aaaab281000) libz.so.1 => /lib64/libz.so.1 (0x00002aaaab486000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aaaab69a000) libc.so.6 => /lib64/libc.so.6 (0x00002aaaab8b5000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002aaaabc0e000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002aaaabe3c000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002aaaac0d1000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002aaaac2d4000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002aaaac4f9000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002aaaac702000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002aaaac904000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002aaaacb19000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002aaaacd32000)

基本上,我已经厌倦了从源代码OpenSSL(0.9.8r和1e)编译,重新从回购重新安装,做了一个make clean翻新OpenSSL和Apache无数次 – 但我不能把它编译成apache基础或dynamic地作为共享对象文件。

我在这里做错了什么?

更新1:

在做一个make clean之后,我使用与上面相同的参数重新configuration,没有任何影响。

config.log位于Pastebin 。

更新2:

修改LD_LIBRARY_PATH对mod_ssl.so的lib-deps没有影响。

更新3:

我编译并重新编译了很多次,并用ldconfigvalidation了OpenSSL库的目录在我的path中,并且包含在ld.so.conf中。 在运行时仍然无法获取httpd / mod_ssl来加载库。

当你编译Apache时,你应该有“–enable-so”。 我想你一定有,因为这个模块正在尝试加载。

同样在编译openssl之后,确保系统可以使用“/ sbin / ldconfig -v / usr / local / openssl / lib”find共享库

我也想编辑/etc/ld.so.conf.d/local.conf为/ usr / local / openssl / lib添加一行

我记得openssl默认不会生成共享库。 我这样做:

./configure –prefix = / usr / local / openssl linux-elf共享

那么你仍然需要像上面那样做ldconfig。 并告诉Apache在哪里可以findSSL的libs。

同样的问题又有几分钟了,所以我补充说:

 LDFLAGS=-L/usr/local/ssl/lib 

和./configure(Apache)的参数修改自:

 --with-ssl=/usr/local/ssl 

 --with-ssl=/usr/local/ssl/lib 

并没有它的好。

ldd mod_ssl.so libssl.so.6 => /lib64/libssl.so。

会表明你没有链接到/ usr / local中的openssl。 为你的apache / openssl构build做一个“make clean && makedistclean”,然后重build/安装openssl。 ./configure [你的选项] apache,并检查它的config.log,以确保它链接到正确的openssl库。

或者,请提供您现有config.log的输出

如前所述,它肯定会连接到错误的OpenSSL安装。 您应该在ld.so.conf中有/ usr / local / ssl / lib,但可以使用以下Apacheconfiguration命令尝试:

 LDFLAGS=-L/usr/local/ssl/lib \ ./configure \ --enable-ssl \ --enable-mods-shared=all \ --with-ssl=/usr/local/ssl 

另外,你确定OpenSSL本身是按照预期编译的吗? 它可能会失败,使自己的共享库回落到静态,但仍编译成功?

检查SELinux日志。 您必须使用正确的SELinux属性来标记二进制文件。