Openssl 未定义符号:SSLv2\u客户端\u方法

Openssl 未定义符号:SSLv2\u客户端\u方法,openssl,Openssl,我正在尝试将openssl-1.0.1e更新为1.0.1s。这是源代码编译。在我完成以下步骤之后 cd openssl-1.0.1s /配置-共享 制造 安装 apachectl配置测试 我得到一个错误:“httpd:Syntax error在/usr/local/apache2/conf/httpd.conf的第55行:无法将/usr/local/apache2/modules/mod_ssl.so加载到服务器:/usr/local/apache2/modules/mod_ssl.so

我正在尝试将openssl-1.0.1e更新为1.0.1s。这是源代码编译。在我完成以下步骤之后

  • cd openssl-1.0.1s

  • /配置-共享

  • 制造

  • 安装

  • apachectl配置测试

    我得到一个错误:“httpd:Syntax error在/usr/local/apache2/conf/httpd.conf的第55行:无法将/usr/local/apache2/modules/mod_ssl.so加载到服务器:/usr/local/apache2/modules/mod_ssl.so:未定义的符号:SSLv2_client_方法”

  • 我还尝试了
    /config--prefix=/usr enable shared-no-ssl2
    ,也是同样的错误。在我安装openssl-1.0.1s之前,我
    清除了旧版本

    有人知道解决办法吗

    …未定义的符号:SSLv2\u客户端\u方法

    似乎是
    SSLv2_client_method
    和friends被意外地从库的1.0.1和1.0.2分支中删除。请参见2016年3月8日的OpenSSL开发者邮件列表

    有人知道解决办法吗

    已使用修复。您应该能够使用以下工具手动修补
    ssl/s2_meth.c

    -# if PEDANTIC
    -static void *dummy = &dummy;
    -# endif
    +SSL_METHOD *SSLv2_method(void) { return NULL; }
    +SSL_METHOD *SSLv2_client_method(void) { return NULL; }
    +SSL_METHOD *SSLv2_server_method(void) { return NULL; }
    

    与此相关,这并不完全正确:

    我还尝试了
    /config--prefix=/usr enable shared-no-ssl2

    它的
    no-ssl2
    ,而不是
    -no-ssl2
    。另请参见OpenSSL wiki上的

    另外,
    --prefix=/usr
    可能是危险的,因为它通常会破坏使用系统版本库的系统实用程序。有时发行版会应用OpenSSL源代码中不存在的补丁程序(想到Ubuntu)


    通常您需要的是
    --openssldir=/usr/local/..
    。它看起来像是您自己构建的Apache,因此您应该能够使用它。您可以获取最新的OpenSSL,在
    CFLAGS
    中包含一个RPATH,构建OpenSSL,将其安装到
    /usr/local
    ,然后根据该版本的OpenSSL构建Apache。有关在OpenSSL wiki上的
    CFLAGS
    中添加RPATH可以找到。

    Hi jww,非常感谢您的建议。在我尝试修补ssl/s2_meth.c后,它起到了作用。 稍后将尝试RPATH。