我正在尝试使用heartbleed补丁(1.0.1g)将我的web服务器更新到最新的openssl。 我从openssl.org抓取了tarball。 说通常的./configure; make; make install
./configure; make; make install
./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
nm -g | grep idea
说: U EVP_idea_cbc
…所以它知道符号,但符号是不确定的。
Openssl文档说,由于专利(显然在2012年到期),他们默认禁用IDEA。 他们详细介绍了如何禁用它,而不是如何启用它。 而且,他们说这是默认禁用的。
Apache httpd需要这个符号,如果没有它的话就不能启动。
我试过说“config shared enable-idea”,configuration脚本很开心,但是构build完成后这个符号仍然是undefined。 我把编译输出input到一个文件中,并且正在编译crypto / idea文件。
从EVP_*
开始的每一个符号都是未定义的…它们在libssl.a
中也是未定义的…所以也许我在吠叫错误的IDEA树?
所以我的问题就变成了 – 我如何启用这些EVP_*
符号?
我解决了它。 问题很简单。 这些符号在libssl.so
(或.a
)中确实是未定义的。 它们实际上是在libcrypto.so
定义的。 我没有得到新的libcrypto.so
因为…
…新的openssl tarball默认在/usr/local/ssl
安装它的输出。 这是可配置的,但它真的想要在/something/something/ssl
安装所有ssl的东西(包括libs)。 所以你有/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.
创建了一个符号链接/usr/lib64 from openssl.so.1.0.0 -> /usr/local/etc/ssl/lib/openssl.so.1.0.0.
但是我没有意识到我需要为libcrypto.so
做同样的事情,所以仍然有旧的东西。
所以我使用了新的libssl.so
和一个旧的libcrypto.so
。 坏的魔咒