1

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

操作系统 MacOS 10.12.6 Sierra。
阿帕奇版本 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 模块/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,
4

1 回答 1

0

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

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

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

于 2018-08-02T02:44:28.213 回答