PHP OpenSSL - openssl_private_encrypt崩溃网页

时间:2013-05-18 19:21:05

标签: php openssl xampp public-key-encryption phpseclib

bugs.php.net报道了这一情况。如果我用xampp/apache/bin中的相同文件替换xampp/php/中的 libeay32.dll和ssleay32.dll ,那么它可以正常工作,但我无法使用SSL

我需要使用SSL,有没有人能够解决这个问题?


我在 XAMPP (1.8.1)的 PHP (5.4.7)中使用 OpenSSL 库进行加密,解密等。我也在localhost上使用SSL。

我可以使用openssl_pkey_new()方法创建私钥 - 公钥对,并生成证书。

但是当我尝试访问我的根证书(使用上述功能创建)时,网页崩溃

$root_private_key = openssl_get_privatekey(file_get_contents($path), $pass);
echo "KEY: " . $root_private_key; // KEY: Resource id #11
openssl_private_encrypt($plaintext, $encrypted_data, $root_private_key);

我甚至尝试使用 phpseclib库,但这也做同样的事情。

我还尝试设置ini_set('max_execution_time', 0);


我检查了 PHP日志,它是空的,并在 Apache日志中找到以下内容:

[mpm_winnt:notice] [pid 3312:tid 484] AH00428: Parent: child process exited with status 3221225477 -- Restarting.
[ssl:warn] [pid 3312:tid 484] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[mpm_winnt:notice] [pid 3312:tid 484] AH00455: Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 configured -- resuming normal operations
[mpm_winnt:notice] [pid 3312:tid 484] AH00456: Server built: Aug 18 2012 12:41:37
[core:notice] [pid 3312:tid 484] AH00094: Command line: 'apache\\bin\\httpd.exe -d C:/xampp/apache'
[mpm_winnt:notice] [pid 3312:tid 484] AH00418: Parent: Created child process 1520
AH00548: NameVirtualHost has no effect and will be removed in the next release C:/xampp/apache/conf/extra/httpd-vhosts.conf:19
[ssl:warn] [pid 1520:tid 496] AH01873: Init: Session Cache is not configured [hint: SSLSessionCache]
[mpm_winnt:notice] [pid 1520:tid 496] AH00354: Child: Starting 150 worker threads.

我试过以下但没有一点有用:

PHP openssl_public_encrypt causing Page Timeout/Connection Reset?

php/timeout/connection to server reset?

Apache server (xampp) crashes when using openssl function

PHP dies unexpectedly without error

我将不胜感激任何帮助/建议。

3 个答案:

答案 0 :(得分:2)

对于那些仍然遇到麻烦的人:

直到完全打包的xampp官方版本与下一版本的apache一起发布才能解决这个问题,我已经成功修复了这个问题,方法是将我的Apache版本改为一个:http://www.apachelounge.com/download/这个修复了bug但仍允许我使用OpenSSL

此页面上的第二个Apache 2.2.4下载专门用于修复此错误。对我来说很简单:

  • 停止Apache
  • xampp\apache重命名为xampp\apacheold以防万一它崩溃。
  • 从下载的zip
  • 中复制到Apache24xampp\Apache24
  • 将其重命名为apache
  • .bat文件夹中的xampp\apacheold个文件复制到新的xampp\apache文件夹中。
  • xampp\apache\conf文件夹替换为xampp\apacheold
  • 中的文件夹
  • 再次启动Apache

我希望这有助于某人。

答案 1 :(得分:1)

bugs.php.net报道了这一情况。如果我用 xampp / php / 中的相同文件替换 xampp / apache / bin 中的以下文件,那么它可以正常工作:

  • libeay32.dll
  • ssleay32.dll

但是,无法使用SSL ,否则Apache在启动时会出错。

答案 2 :(得分:0)

phpseclib使用OpenSSL(如果可用)生成RSA私钥。要禁用此行为,请在包含Crypt / RSA.php之后执行此操作:

define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL);

你想要产生的关键有多大,顺便说一下?