我正在运行Centos 6.5 2.6.32-431.11.2.el6.x86_64。
我有我从源代码编译的Apache PHP和openssl
apache2.4.7 php 5.5.10 openssl 1.0.1f
我已经在另一个实例成功更新apache到2.4.7,但在这台服务器上,我得到以下错误。
httpd: Syntax error on line 129 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: SSL_get_srp_userinfo
我的openssl的configuration是
./config --prefix=/usr/local --openssldir=/usr/local/openssl -fPIC
我的configuration为apache,这是以前的2.4.7安装config.nice是
"./configure" \ "--enable-so" \ "--with-included-apr" \ "--enable-ssl" \ "--with-ssl=/usr/local/openssl" \
我可以从config.status中看到它正在寻找ssl的正确位置
S["MOD_SSL_LDADD"]="-export-symbols-regex ssl_module" S["ab_LDFLAGS"]="-L/usr/local/openssl/lib -lssl -lcrypto -lrt -lcrypt -lpthread" S["ab_CFLAGS"]="-I/usr/local/openssl/include"
然而,当在一个实际的mod_ssl.so上做一个ldd显示的东西完全不同,那么我看到所有其他的Apache安装,我已经与mod_ssl工作。
通常在所有的工作安装我看到类似的东西
# ldd /usr/local/apache2/modules/mod_ssl.so linux-vdso.so.1 => (0x00007fff489ff000) librt.so.1 => /lib64/librt.so.1 (0x00007f839028d000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f8390056000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f838fe38000) libc.so.6 => /lib64/libc.so.6 (0x00007f838faa5000) /lib64/ld-linux-x86-64.so.2 (0x00007f83908bd000) libfreebl3.so => /lib64/libfreebl3.so (0x00007f838f843000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f838f63e000)[/CODE]
然而,在这个特殊的安装,我明白了
# ldd /usr/local/apache2/modules/mod_ssl.so linux-vdso.so.1 => (0x00007ffff1bff000) libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f93f743b000) librt.so.1 => /lib64/librt.so.1 (0x00007f93f7232000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f93f6ffb000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f93f6dde000) libc.so.6 => /lib64/libc.so.6 (0x00007f93f6a49000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f93f6805000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f93f651f000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f93f631a000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f93f60ee000) libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f93f5d0e000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f93f5b09000) libz.so.1 => /lib64/libz.so.1 (0x00007f93f58f3000) /lib64/ld-linux-x86-64.so.2 (0x00007f93f7a7b000) libfreebl3.so => /lib64/libfreebl3.so (0x00007f93f567c000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f93f5470000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f93f526d000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f93f5053000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f93f4e33000)[/CODE]
这是更广泛的。 我不认为这可能是因为Apache不从正确的位置读取openssl。
任何build议,欢迎。
谢谢,
好,
解决方法是将实际的LDFLAGSconfiguration置于实际configuration中。 所以应该看起来像这样
LDFLAGS="-L/usr/local/lib64"; export LDFLAGS "./configure" \ "--enable-so" \ "--with-included-apr" \ "--enable-ssl" \ "--with-ssl=/usr/local/openssl" \ "LDFLAGS=-L/usr/local/lib64" \ "$@"
我只是增加了这个答案,这样来自其他人的东西不会被你试图做的事情所误导,也不会被别人提供的(非常好的)帮助所误导。
你正在处理这个完全错误的方式。 您需要了解Red Hat以及CentOS处理漏洞和修补的方式。 您可以在这里阅读更全面的版本 ,但是本质上是这样的:假设EL6(因此C6)在版本1.1.1中提供了一个名为foo的包。 当在foo-1.1.1发现漏洞,并且项目释放1.1.2时,RH采取修复措施并将其foo-1.1.1-2移植到版本1.1.1,释放名为(比如说) foo-1.1.1-2的RPM。
只要你跟上你的补丁,你将不受影响foo 1.1.1的所有漏洞的影响,但是foo --version会继续报告1.1.1 。
对于一些安全审计员来说,这是非常困难的,特别是那些雇用版本清单的猴子。 我无法通过他们所报告的每个所谓的“ 漏洞 ”来痛苦地反驳PCI审计报告的数量,并且通过分析RH的更新日志,显示每个CVE已经被解决。 (我个人认为PCI审计员认为版本清单是检查漏洞是否是专业欺诈的正确方法,但这是一个单独的论点)。但是对于RH / CentOS系统以及其他遵循相同补丁scheme(最主要发行),这是处理这些审计的正确方法。
但是比这更糟的是,你正在做的事情正在危害安全。 对于您决定手动更新的每个软件包, 您现在必须保持最新状态 。 您必须分别跟踪每个项目,每次发布新版本时,都必须进行升级,使系统不稳定并导致停机。 而且,你必须在它被释放后立即执行,而不仅仅是在每次审计时,否则你将会运行一个系统,在大部分时间被打开时,这个系统是不安全的。
严重: 不要做你正在做的事情 。 这是错误的事情。 这是一件危险的事情。 这是一个没有实际优势的很多工作的地狱。
我正在运行CentOS 6.5 2.6.32-431.17.1.el6.x86_64,主要用于支持Java servlet容器
感谢您的自动回答,我已经能够build立并获得与SSL运行httpd。 对我来说,突破是在适当的时候用PIC / pie构buildopenssl和httpd
OpenSSL 1.0.1h 2014年6月5日的configuration参数在本上下文中使用
cd openssl-1.0.1h ./config -fPIC --prefix=/usr/local --openssldir=/usr/local/openssl make make test sudo make install
configuration为Apache / 2.4.9(Unix)APR 1.5.1,APR-UTIL 1.5.3是这个上下文
export LDFLAGS=”-L/usr/local/lib64” ./configure --prefix=/usr/local/httpd \ --enable-so \ --enable-pie \ --with-apr=/usr/local/apr/bin/apr-1-config \ --enable-ssl \ --with-ssl=/usr/local/openssl \ --enable-allowmethods \ --enable-info \ --enable-speling \ --with-mpm=prefork \ LDFLAGS=-L/usr/local/lib64 \ $@
而且,在工作之前,我对httpd.conf所做的更改是:
User apache Group apache LoadModule ssl_module modules/mod_ssl.so LoadModule socache_shmcb_module modules/mod_socache_shmcb.so Include conf/extra/httpd-ssl.conf
之后,所有必要的是产生一个自签名的证书,并适当地指向他们
的conf /额外/的httpd-ssl.conf中