今天为了修改一个关于mod_ssl漏洞误报的问题,搭建了一个测试环境,使用的东西都是很老的了。
准备的东西:
1、apache-1.3.27
2、mod_ssl-2.8.14-1.3.27.tar.gz
3、openssl-0.9.8k.tar.gz
我的环境是Redhat Enterprise Linux 5
安装过程就不想说了,如果不知道,可以看看mod_ssl解压后的安装说明,或者到mod_ssl的官网,有个example里面有。想记录的是遇到的问题。
我安装的过程中遇到了两个问题:
第一个问题:
gcc -c -I../../os/unix -I../../include -DLINUX=22 -DMOD_SSL=208114 -DUSE_HSREGEX -DEAPI -DNO_DL_NEEDED `../../apaci` -DSSL_COMPAT -DSSL_USE_SDBM -DSSL_ENGINE -I/root/openssl-0.9.8k/include -DMOD_SSL_VERSION=\"2.8.14\" ssl_engine_pphrase.c
ssl_engine_pphrase.c: 在函数 ‘ssl_pphrase_Handle_CB’ 中:
ssl_engine_pphrase.c:493: 错误:‘PEM_F_DEF_CALLBACK’ 未声明 (在此函数内第一次使用)
ssl_engine_pphrase.c:493: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
ssl_engine_pphrase.c:493: 错误:所在的函数内只报告一次。)
make[4]: *** [ssl_engine_pphrase.o] 错误 1
make[3]: *** [all] 错误 1
make[2]: *** [subdirs] 错误 1
make[2]: Leaving directory `/root/apache_1.3.27/src'
make[1]: *** [build-std] 错误 2
make[1]: Leaving directory `/root/apache_1.3.27'
make: *** [build] 错误 2
就是ssl_engine_pphrase.c文件中的PEM_F_DEF_CALLBACK没有定义,所以编译器不知道这是什么玩意,所以报错了。
解决方法: 可以直接修改这个源文件,增加如下代码:
#ifdef OPENSSL_VERSION_NUMBER
#ifndef PEM_F_DEF_CALLBACK
#define PEM_F_DEF_CALLBACK PEM_F_PEM_DEF_CALLBACK
#endif
#endif
就这样这个问题就可以解决了。
至于原因网上说的好像是openssl的版本高了导致的。没有研究过这些源码,所以都是拿来主义。
第二个问题:
虽然解决了上面这个问题,但是到最后,编译没有问题,但是连接的时候出现了问题:
显示如下。。。
In function `dlfcn_load'
:dso_dlfcn.c:(.text+0x45): undefined reference to `dlopen'
:dso_dlfcn.c:(.text+0xc4): undefined reference to `dlclose'
:dso_dlfcn.c:(.text+0x102): undefined reference to `dlerror'
解决办法是修改makefile文件,增加一条 -ldl就可以了。
阅读(635) | 评论(0) | 转发(0) |