使用OpenSSL从非标准位置构建mod_ssl.so

时间:2018-01-24 18:20:26

标签: apache openssl mod-ssl

所以我们必须在网页上使用TLS1.1,但目前正在运行OpenSSL0.9.8za。所以必须将OpenSSL升级到至少1.0.2。

操作系统MacOS 10.12.6 Sierra。
Apache 2.2.34版本

我使用安装文件中的快速方法安装了OpenSSL:./ config - >制作 - >进行测试 - > make install 它安装没有问题,我可以看到。

然而,当我尝试使用:

构建一个新的mod_ssl.so时
sudo /usr/local/apache2/bin/apxs -c -D HAVE_OPENSSL=1 -i -I /usr/local/ssl/include/openssl mod_ssl.c

在没有-D HAVE_OPENSSL = 1的情况下出现了很多错误,但是我得到了2个警告:

  

mod_ssl.c:275:5:警告:' ERR_remove_state'已弃用

     

mod_ssl.c:302:5:警告:隐含的功能声明' CRYPTO_malloc_init'在C99 [-Wimplicit-function-declaration]

中无效

但它在/usr/local/apache2/modules/mod_ssl.so中创建了一个mod_ssl.so,它应该是。但是当我启动服务器时,我收到以下错误消息:

  

httpd:/usr/local/apache2/conf/httpd.conf第97行的语法错误:无法将/usr/local/apache2/modules/mod_ssl.so加载到服务器:dlopen(/ usr / local / apache2 / modules / mod_ssl.so,10):找不到符号:_ssl_cmd_SSLCACertificateFile \ n引用自:/usr/local/apache2/modules/mod_ssl.so\n预期:flat namespace \ n在/ usr / local / apache2 / modules / mod_ssl.so

第97行是加载命令:

  

LoadModule ssl_module modules / mod_ssl.so

旧的mod_ssl.so大小为335K,现在构建的大小为26K。我不知道这是否意味着什么。

我尝试使用包含直接来自下载的OpenSSL文件夹的mod包含mod_ssl.so,结果相同。

我已经在网上浏览了两天,但我无法找到任何解决方案。什么想法我做错了什么?

---编辑---

我试过了:

sudo /usr/local/apache2/bin/apxs -c -D HAVE_OPENSSL=1 -i -I /usr/local/ssl/include/ -L /usr/local/ssl/lib -Wl,-rpath=/usr/local/ssl/lib mod_ssl.c

路径应该是这样的吗?这个编译没有任何警告,并创建一个大约26k但无法运行的mod_ssl.so文件。尝试启动服务器会显示与上面相同的错误消息。

我还尝试编译Apache服务器以查看服务器是否可以使用以下命令自行编译:

./configure --enable-mods-shared="all" --enable-so --enable-ssl --with-ssl=/usr/local/ssl

然而这会产生错误:

  

configure:error:...错误,SSL / TLS库缺失或无法使用

并直接链接到/ usr / local / ssl / lib文件夹:

./configure --enable-mods-shared="all" --enable-so --enable-ssl --with-ssl=/usr/local/ssl/lib

然而,在安装的make步骤失败之前,这会产生10个警告和错误。

第一次警告:

ssl_engine_init.c:374:13: warning: implicit declaration of function 'SSLv2_client_method' is
  invalid in C99 [-Wimplicit-function-declaration]

最终错误:

ssl_engine_init.c:992:42: error: incomplete definition of type 'struct dh_st' BN_num_bits(dhparams->p), vhost_id,

1 个答案:

答案 0 :(得分:0)

在构建mod_ssl时遇到了类似的情况(在Ubuntu上,但是原理应该相同)。我发现,如果我告诉mod_ssl.so处理该目录中C语言源文件的所有 all ,则可以得到一个适当大小的apxs文件,该文件如下:

apxs2 -c *.c
sudo apxs2 -i mod_ssl.la

(因此,安装时只需要提及mod_ssl.la文件,但编译时必须包括所有源文件。)