首页 > 解决方案 > 编译过时的 PHP 会产生带有 OpenSSL 函数的核心转储。OpenSSL 版本不匹配?

问题描述

我使用这些 ./config 选项编译了 OpenSSL 0.9.8x:

./config --prefix=/usr/local/openssl-0.9.8 --openssldir=/usr/local/openssl-0.9.8

我正在使用这些 ./configure 选项(以及其他选项)编译我的 PHP 版本:

   --with-openssl=/usr/local/openssl-0.9.8
   --with-openssl-dir=/usr/local/openssl-0.9.8

问题是,当我运行 PHP 脚本时,openssl_public_encrypt我遇到了分段错误。

这是 gdb 所说的:

Program terminated with signal 11, Segmentation fault.
#0  0x00007fd3381c5a48 in RSA_public_encrypt () from /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0

在 /usr/local/openssl-0.9.8/lib/ 中有 libcrypto.so.0.9.8 那么为什么不使用它呢?

这是我的 OpenSSL Makefile:

https://pastebin.com/0QSqLCr8

这是我的 PHP Makefile:

https://pastebin.com/dGmu0SYZ

这是重现该问题的 Dockefile:

https://pastebin.com/ziZzvTh8

有任何想法吗?谢谢!

标签: phpopensslcoredump

解决方案


问题是 ld-linux 在运行时将链接解析到错误的库。

尝试通过设置 LD_LIBRARY_PATH 来执行它: LD_LIBRARY_PATH=/usr/local/openssl-0.9.8/lib php very_old_php_44_script_which_shall_not_be_used.php

如果它有效,您可能希望使用以下命令执行它:LD_DEBUG=all php ...检查动态链接器在何处以及为什么不使用 0.9.8 openssl 版本。


推荐阅读