升级到 apache 2.4.9 opensssl 错误 SSL_get_srp_userinfo

升级到 apache 2.4.9 opensssl 错误 SSL_get_srp_userinfo

我正在运行 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

相关内容