2012-03-16 7 views
0

に:それは、Apache(PHP 5.2.17の下でコードがCLIで実行されたときに正常に動作しているが、セグメンテーションapacheの下openssl_signの障害が、私は看板がopenssl_sign使用して、要求PHPコードを持つオールライトCLI

if (($pkeyid = openssl_pkey_get_private($keystr)) === false) 
{ 
    $this->setError('Cannot retrieve private key from: ' . $this->getParam('keyFile')); 
    return false; 
} 
if (!openssl_sign($message, $sign, $pkeyid, OPENSSL_ALGO_SHA1)) 
{ 
    $this->setError('Cannot sign with private key'); 
    return false; 
} 

モジュールとして)!openssl_sign($message, $sign, $pkeyid, OPENSSL_ALGO_SHA1)の行はsegfault(11)になります。

$pkeyid = openssl_pkey_get_private($keystr)は有効なキーを与えます。

このようなエラーが発生しましたか?もしあれば解決策は何ですか? openssl_signに準拠した代替手段?どのようにして迅速に診断することができますか?

答えて

2

PHPモジュールとApache httpd自体がlibopensslとリンクされていますが、バージョンが異なるため、「間違った」ライブラリのシンボルが呼び出されてしまいます。

設定ulimit -c unlimitedhttpdダンプcoreをしましょう、とgdbでそれを分析:

gdb /path/to/httpd /path/to/core 
(gdb) info shared 
# look for more than one instance of openssl 

(gdb) info func EVP_SignFinal 
# look for more than one definition -- one could be statically linked into httpd 
+0

感謝。 1つの質問のみ - コアをダンプするためにhttpdを作成する方法は? – dmitry

+0

私はちょうどhttpdとphpのlibの異なるバージョンについてのアイデアのために、とにかく、httpdを再コンパイルすることに決めました。 – dmitry