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

时间:2016-10-11 00:21:37

标签: apache autoconf suse php-openssl mod-ssl

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

  • OS:Suse SE11SP3
  • Openssl:0.9.8j< -which with original Suse linux
  • 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。

请帮帮我。

2 个答案:

答案 0 :(得分:0)

由于Alvits的帮助, 我可以第一次在stackoverflow中写这个答案。

<强> !!感谢Alvits !!

我最初的任务是我需要在本地目录中安装不同版本的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的帮助。没有他的帮助,我无法做到这一点。

答案 1 :(得分:0)

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

将Apache重新编译为进行清理,配置,进行安装的过程。