2016-03-08 82 views
2

我試圖將openssl-1.0.1e更新爲1.0.1s。它是源代碼編譯。之後,我做了如下的步驟,未定義符號:SSLv2_client_method

  1. CD的OpenSSL 1.0.1s
  2. ./config中--shared
  3. 使
  4. 使安裝
  5. 的apachectl configtest

    我得到了一個錯誤爲「httpd:/usr/local/apache2/conf/httpd.conf第55行的語法錯誤:無法將/usr/local/apache2/modules/mod_ssl.so加載到服務器:/ usr/local/apache2/modules/mod_ssl.so:未定義的符號:SSLv2_client_m ethod「

我也試過./config --prefix=/usr enable-shared -no-ssl2,它也是同樣的錯誤。在我安裝openssl-1.0.1s之前,我老舊的是make clean

劑量任何人都知道任何解決方案?

回答

5

...未定義的符號:SSLv2_client_method

看來SSLv2_client_method和朋友們意外地從圖書館的1.0.1和1.0.2分支刪除。請參閱2016年3月8日發佈在OpenSSL開發人員郵件列表上的Issue #4398: BUG/1.0.2g breaks CURL extension

劑量任何人都知道任何解決方案?

它被修復了Commit 133138569f37d149, Retain SSLv2 methods as functions that return NULL。你應該能夠進行手工修補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上的Compilation and Installation | Configure Options

另外,--prefix=/usr可能很危險,因爲它通常會破壞使用系統版本庫的系統實用程序。有時,發行版會應用OpenSSL源代碼中不存在的補丁(Ubuntu想起來)。

通常你想要的是--openssldir=/usr/local/...。它看起來像你自己建立了Apache,所以你應該可以使用它。您可以獲取最新的OpenSSL,在CFLAGS中包含RPATH,構建OpenSSL,將其安裝到/usr/local中,然後針對該版本的OpenSSL構建Apache。有關在CFLAGS中添加RPATH的信息,請參閱OpenSSL wiki上的Compilation and Installation

+0

嗨jww,非常感謝您的建議。它在我嘗試修補ssl/s2_meth.c後工作。稍後將嘗試RPATH。 –

+0

@ Y.Chen如果解決了您的問題,請將答案標記爲已接受。 – aditya