2

我正在尝试使用 heartbleed 补丁 ( 1.0.1g ) 将我的 Web 服务器更新到最新的 openssl。我从 openssl.org 获取了压缩包。照例说./configure; make; make install。不得不说config shared让它制作 .so 文件(默认情况下它只生成 .a )。更新了 /usr/lib64 中的链接以指向新的 .so -

现在 httpd 无法运行并出现以下抱怨:

/usr/sbin/httpd: symbol lookup error: /usr/lib64/libssl.so.1: undefined symbol: EVP_idea_cbc

nm -g | grep idea说:U EVP_idea_cbc

...所以它知道符号,但符号未定义。

Openssl 文档说他们默认禁用 IDEA,因为专利(显然在 2012 年到期)。他们详细介绍了如何禁用它,但没有介绍如何启用它。此外,他们说默认情况下它是禁用的。

Apache httpd 需要该符号,没有它就无法启动。

我试过说“config shared enable-idea”并且配置脚本很高兴,但构建后符号仍然未定义。我将构建输出通过管道传输到一个文件中,并且正在编译加密/想法文件。

开头的每个符号EVP_*都是未定义的...它们在libssl.a...中也是未定义的所以也许我在吠叫错误的IDEA树?

所以我的问题变成了 - 我如何启用这些EVP_*符号?

4

1 回答 1

5

我解决了。问题很简单。这些符号确实在libssl.so(或.a)中未定义。它们实际上定义在libcrypto.so. 我没有得到新的libcrypto.so,因为......

...新的 openssl tarball 默认将其输出安装在/usr/local/ssl. 这是可配置的,但它真的想在/something/something/ssl. 所以你有/something/something/ssl/lib/something/something/ssl/bin等等。

所以当我说的时候make install,它创造/usr/local/ssl了所有的好东西。我做了一个符号链接,/usr/lib64 from openssl.so.1.0.0 -> /usr/local/etc/ssl/lib/openssl.so.1.0.0. 但我没有意识到我需要为 做同样的事情libcrypto.so,所以仍然有旧的东西。

所以我用的是新libssl.so的和旧的libcrypto.so。糟糕的魔力。

于 2014-04-12T02:34:01.860 回答