如何在 Apache 2.2.9 中使用 mod_ssl 将 openssl 0.9.8 升级到 1.0.2

Posted

技术标签:

【中文标题】如何在 Apache 2.2.9 中使用 mod_ssl 将 openssl 0.9.8 升级到 1.0.2【英文标题】:How to upgrade openssl 0.9.8 to 1.0.2 with mod_ssl in Apache 2.2.9 【发布时间】:2017-02-19 11:43:45 【问题描述】:

我被要求在 SuseSE11SP3 中使用 openssl 1.0.2 重新编译 mo_ssl。 不过,我是 Suse 的新手,但对 linux 略知一二。

操作系统:Suse SE11SP3 Openssl : 0.9.8j Web 服务器:Apache httpd 2.2.9

这是我的限制。我不能使用zypperrpm,因为公司安全政策不允许我这样做。这是荒谬的,这就是它的方式。 我的另一个限制是这个系统被我没有权限的其他网络服务器使用。我必须尽可能在本地制作。

我希望它发生的是,当我重新编译 apache 服务器时,我希望看到 mod_ssl 链接到较新版本的 Openssl 库。

所以,我下载了 Openssl 1.0.2h 源文件:

./confgiure --prefix=//PREFIX/openssl --opendir=/PREFIX/openssl
make test
make install

我成功地在本地目录上安装了 openssl。

然后我尝试重新编译已经存在的 httpd2.2.9。 所以我去了httpd 2.2.9中的源文件

make clean

export LIBS=-ldl
export LD_LIBRARY_PATH="/PREFIX/openssl"
export LIBS="-L/PREFIX/openssl"
export CPPFLAGS="-I/PREFIX/include/openssl" 

./configure --prefix=/PREFIX/apache22  --enable-so --enable-ssl=ssl -with-ssl=/PREFIX/openssl --enable-module=shared CC=/usr/bin/gcc

make install

有一些错误,但我想通了并编译了它。然而, mod_ssl 的最终结果仍然链接到旧的 Openssl 0.9.8 而不是较新的版本 1.0.2h

我在这些步骤中遗漏了什么?还是我哪里做错了?


//openssl install
./config -fPIC shared --prefix=/PREFIX/openssl --openssldir=/PREFIX/openssl
make 
make test
make install

// install apache2 

//recompiling after apache2 is installed with openssl 

export LIBS=-ldl
export LD_LIBRARY_PATH="/PREFIX/openssl/lib"
export LDFLAGS="-L/PREFIX/openssl"
export CPPFLAGS="-I/PREFIX/openssl/include/openssl" 
export CFLAGS="-Wl,-rpath=/PREFIX/openssl:/usr/lib -I/PREFIX/openssl/include/openssl"

./configure --prefix=/PREFIX/apache22  --enable-so --enable-ssl=shared -with-ssl=/PREFIX/openssl --enable-module=shared CC=/usr/bin/gcc
make
make install

上面的命令在“apache22/modules”下创建了 mod_ssl.so,但是 当我执行 ldd mod_ssl.so 时,结果如下

linux-vdso.so.1 =>  (0x00007fffef8f2000)
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ffe6a48d000)
libc.so.6 => /lib64/libc.so.6 (0x00007ffe6a116000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffe6a913000)

libssl.so,libcrypto.so 未链接.. 我不知道还有什么我可以在这里将 mod_ssl.so 链接到不同版本的 openssl。

请帮助我。

【问题讨论】:

你试过设置LDFLAGS=-L/PREFIX/openssl吗? 感谢您的快速回复。是的。我试过了。它没有成功。 告诉链接器你有一个首选路径。试试export CPPFLAGS="-Wl,-rpath=/PREFIX/openssl:/usr/lib -I/PREFIX/include/openssl" 阿尔维茨,非常感谢您的回复。我会尝试并告诉你。 我有一个拼写错误。应该是CFLAGS,而不是CPPFLAGS 【参考方案1】:

在阿尔维茨的帮助下, 我可以第一次在 *** 中写下这个答案。

!!向阿尔维茨致敬!!

我最初的任务是我需要在本地目录中安装与系统 openssl 不同的不同版本的 openssl。但我喜欢制作与较新的 openssl 相关联的 mod_ssl。

首先,我安装了带有共享选项的openssl,我最初忘记了它并且没有创建mod_ssl。所以要小心不要忘记它。

cd openssl_source_direcotry
./config -fPIC shared --prefix=/PREFIX/openssl --openssldir=/PREFIX/openssl
make 
make test
make install

下一步,我添加了一些环境变量。 PREFIX 是我的本地目录。 安装时请使用不同的名称而不是 PREFIX。

export LIBS=-ldl
export LD_LIBRARY_PATH="/PREFIX/openssl/lib"
export LDFLAGS="-L/PREFIX/openssl"
export CPPFLAGS="-I/PREFIX/openssl/include/openssl" 
export CFLAGS="-Wl,-rpath=/PREFIX/openssl/lib:/usr/lib -I/PREFIX/openssl/include/openssl"

下一步是重新编译 apache 服务器。我假设你的服务器上已经安装了 apache 服务器。

./configure --prefix=/PREFIX/apache22 --with-apr=/PREFIX/apache22/bin --with-apr-util=/PREFIX/apache22/bin --enable-so --enable-ssl=shared -with-ssl=/PREFIX/openssl --enable-module=shared CC=/usr/bin/gcc
make install

接下来,去apache22/modules确认mod_ssl.so是否正确链接。

ldd mod_ssl.so 

        linux-vdso.so.1 =>  (0x00007fff823ff000)
        libssl.so.1.0.0 => /PREFIX/openssl/lib/libssl.so.1.0.0 (0x00007fb3b32d4000)
        libcrypto.so.1.0.0 => /PREFIX/openssl/lib/libcrypto.so.1.0.0 (0x00007fb3b2e8c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb3b2c3e000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fb3b28c7000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fb3b26c2000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fb3b377d000)

还有一点,我非常感谢 Alvits 的帮助。没有他的帮助,我无法走到这一步。

【讨论】:

我正在尝试使用最新的 openssl 重新编译 apache 并卡在第二步,我的 apache2 位于 /etc/apache2 但它没有 bin 目录,我运行了 sudo find / -name apache2 -type d 命令并验证了命令的结果,find 结果没有apache2/bin 目录,请问在哪里可以找到apache2/bin 的实际位置?【参考方案2】:

这真的很有帮助,在重新编译 apache 之前,请确保将 apache 清理为 'make clean'

将apache重新编译为ma​​ke clean、configure、make install的过程。

【讨论】:

以上是关于如何在 Apache 2.2.9 中使用 mod_ssl 将 openssl 0.9.8 升级到 1.0.2的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache 2.x 中使用 mod_deflate 预压缩文件?

如何仅在一个进程中使用 mod_wsgi 和 django 运行 Apache?

Apache + mod_wsgi部署webpy应用

如何检查 apache 中启用的 mod_headers 和 mod_expires 模块

linux系统中如何解决 Apache mod_proxy_http模块超时处理信息泄露的漏洞? CVE-2010-2068

如何使用 apache 会话和基本身份验证(在 apache2.4 中)?