首页 文章

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

提问于
浏览
0

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

操作系统MacOS 10.12.6 Sierra .
Apache 2.2.34版

我在安装文件中使用快速方法安装了OpenSSL:./ config - > make - > make test - > 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:警告:C99中函数'CRYPTO_malloc_init'的隐式声明无效[-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预期在:/ namespace / local / apache2 / modules / mod_ssl中的flat namespace \ n . 所以

第97行是加载命令:

LoadModule ssl_module modules / mod_ssl.so

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

我试图直接从下载的OpenSSL文件夹中使用包含构建mod_ssl.so,结果相同 .

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

---编辑---

我试过了:

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

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

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

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

相关问题