我正在尝试使用heartbleed补丁(1.0.1g)将我的Web服务器更新到最新的openssl。我从openssl.org抓起了tarball。通常说./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文档说,由于专利(显然在2012年到期),他们默认禁用IDEA。他们详细介绍了如何禁用它,但没有详细说明如何启用它。此外,他们表示默认禁用它。
Apache httpd要求符号,没有它就不会启动。
我试过说" config shared enable-idea"并且配置脚本很高兴,但构建后符号仍未定义。我将构建输出传送到一个文件中,并且正在编译加密/构思文件。
从EVP_*
开始的每个符号都是未定义的...它们在libssl.a
中也未定义......所以也许我会咆哮错误的IDEA树?
所以我的问题变成了 - 如何启用这些EVP_*
符号?
答案 0 :(得分:5)
我解决了。问题很简单。这些符号确实在libssl.so
(或.a
)中未定义。它们实际上是在libcrypto.so
中定义的。我没有得到新的libcrypto.so
,因为......
...新的openssl tarball默认在/usr/local/ssl
安装其输出。这是可配置的,但它确实想要在/something/something/ssl
中安装所有ssl内容(包括lib)。所以你有/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
。坏妈。