![Apache2“服务器”标头报告错误的 openSSL 版本](https://linux22.com/image/46607/Apache2%E2%80%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E2%80%9D%E6%A0%87%E5%A4%B4%E6%8A%A5%E5%91%8A%E9%94%99%E8%AF%AF%E7%9A%84%20openSSL%20%E7%89%88%E6%9C%AC.png)
有谁知道 Apache“服务器”标头从哪里提取 openSSL 版本(文件位置/目录)?我期待 openssl-1.0.1j 但 apache 正在报告 openssl-1.0.1g (系统的 openssl 版本)。
我用这些选项编译了 apache:
--enable-ssl
--with-ssl=/opt/openssl-1.0.1j
ldd mod_ssl.so
linux-vdso.so.1 => (0x00007fff07357000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f94d9895000)
libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f94d962b000)
libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f94d924f000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f94d9032000)
libc.so.6 => /lib64/libc.so.6 (0x00007f94d8c9f000)
/lib64/ld-linux-x86-64.so.2 (0x000000360d200000)
ls -lh /lib64/libssl.so.1.0.0
/lib64/libssl.so.1.0.0 -> /opt/openssl-1.0.1j/lib/libssl.so.1.0.0
ls -lh /lib64/libcrypto.so.1.0.0
/lib64/libcrypto.so.1.0.0 -> /opt/openssl-1.0.1j/lib/libcrypto.so.1.0.0
卷曲-头主机名
HTTP/1.1 200 OK
Date: Tue, 13 Jan 2015 15:27:13 GMT
Server: Apache/2.2.29 (Unix) mod_ssl/2.2.29 OpenSSL/1.0.1g PHP/5.6.4
答案1
经过深入研究 Apache 源代码,我发现Server
响应头的特定部分最终来自调用SSLeay_version(SSLEAY_VERSION)
;它报告 OpenSSL 库的版本(与 OpenSSL 标头中的版本相对)。
那么如果是这样的话和表明mod_ssl.so
它应该动态加载 OpenSSL 库的预期版本,旧版本来自哪里?
我唯一能想到的是:
- A)您编译的 Apache 不是正在运行和响应的 Apache
curl
;也许系统/默认 Apache 正在运行? - b)正在运行的 Apache 正在从与
mod_ssl.so
您在帖子中检查的目录不同的目录加载其动态/共享模块?
我见过的最常见的场景是第一种:手动编译的 Apache 最终安装到例如 /usr/local/apache2/bin/
,但系统/默认 Apache 位于不同的位置,并且启动脚本使用该系统/默认位置,而不是您编译/安装的新 Apache 可执行文件。