【问题标题】:Build mod_ssl.so using OpenSSL from non-standard location从非标准位置使用 OpenSSL 构建 mod_ssl.so
【发布时间】:2018-07-03 21:25:44
【问题描述】:

所以我们必须在网页上使用 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:警告:函数“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): Symbol not found: _ssl_cmd_SSLCACertificateFile\n 引用自:/usr/local/apache2/modules/mod_ssl.so\n 预期在:flat namespace\n in /usr/local/apache2/modules/ mod_ssl.so

第 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

但是这会产生错误:

配置:错误:...错误,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,

【问题讨论】:

  • 您是否按照此处提到的说明进行操作:httpd.apache.org/docs/2.4/programs/apxs.html
  • 使用-I /usr/local/ssl/include/,而不是-I /usr/local/ssl/include/openssl。您还缺少-L 告诉链接器新库在哪里;并且您缺少 RPATH 或 new-dtags 以确保在运行时使用新库。
  • @jww 谢谢。我尝试使用以下命令构建它:“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" RPATH 应该是这样的吗?我将如何使用 new-dtags?

标签: apache openssl mod-ssl


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多