【发布时间】: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?