我正在运行 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 配置是
./config --prefix=/usr/local --openssldir=/usr/local/openssl -fPIC
我的 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 时,显示的内容与我在使用 mod_ssl 的所有其他 apache 安装上看到的内容完全不同。
通常在所有工作安装中我都会看到类似
# 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 的正确位置读取。
欢迎任何建议。
谢谢,
答案1
好的,
解决方案是将实际的 LDFLAGS 配置放入实际配置中。所以它应该看起来像这样
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" \
"$@"
答案2
我只是添加这个答案,以便其他过路的人不会被你尝试做的事情以及其他人提供的(非常好的)帮助误导。
你处理这件事的方式完全错误。 您需要了解 Red Hat 以及 CentOS 处理漏洞和修补的方式。 您可以在此处阅读完整版本,但本质上:假设 EL6(因此 C6)附带一个名为 的软件包foo
,版本为 1.1.1。当在 中发现漏洞foo-1.1.1
并且项目发布 1.1.2 时,RH 会修复该问题并将其反向移植到版本 1.1.1,并发布一个名为 的 RPM(例如)foo-1.1.1-2
。
只要您及时打补丁,您就不会受到已知会影响 foo 1.1.1 的所有漏洞的影响,但foo --version
会继续报告 1.1.1。
这对于一些安全审计员来说很难理解,尤其是那些雇佣猴子和版本检查表的审计员。我已经数不清有多少 PCI 审计报告需要我费力地逐一检查所谓的“脆弱性“他们报告称,通过对 RH 更新日志的分析,每个 CVE 都已得到解决。(我个人认为,那些认为版本检查表是检查漏洞的正确方法的 PCI 审计员是专业欺诈,但这是另一个论点。)但对于 RH/CentOS 系统以及遵循相同修补方案的其他系统(大多数主要发行版都是如此)来说,这是处理这些审计的正确方法。
但更糟糕的是,你正在积极做的事情危害安全性。对于您决定手动更新的每个软件包,你现在必须保持领先地位。您必须分别跟踪每个项目,每次他们发布新版本时,您都必须升级,这会破坏您的系统并导致停机。此外,您必须在发布后立即进行升级,而不仅仅是在每次审核时进行升级,否则您将运行一个在大多数开启时间里都很不安全的系统。
严重地:不要做你正在做的事情。这是错误的。这是危险的。这是一项艰巨的工作,却没有任何实际好处。
答案3
我正在运行 CentOS 6.5 2.6.32-431.17.1.el6.x86_64,主要用于支持 Java servlet 容器
感谢您的自动回复,我能够使用 SSL 构建并运行 httpd。对我来说,突破是根据需要使用 PIC/pie 构建 openssl 和 httpd
在此上下文中使用了 OpenSSL 1.0.1h 2014 年 6 月 5 日的配置参数
cd openssl-1.0.1h
./config -fPIC --prefix=/usr/local --openssldir=/usr/local/openssl
make
make test
sudo make install
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/extra/httpd-ssl.conf