xampp在调用openssl_pkey_new()时出现错误。

9

我正在尝试在我的Windows上安装XAMPP(1.7.3)的OpenSSL,它内置了OpenSSL 0.9.8l。这是我第二次在*amp安装中安装OpenSSL,但第一次非常顺利(它是在同一台机器上的WAMP安装,但我发现XAMPP更适合我,所以我切换了)。

当我尝试运行一个简单的设置脚本时:

var_dump(getenv('OPENSSL_CONF'));
$privateKey = openssl_pkey_new();

while($message = openssl_error_string()){
    echo $message.'<br />'.PHP_EOL;
}

我收到了一条退回的信息:

error:02001003:system library:fopen:No such process
error:2006D080:BIO routines:BIO_new_file:no such file  
error:0E064002:configuration file routines:CONF_load:system lib  

我阅读了php.net页面,了解到可能需要设置openssl.cnf和ssleay.dll环境常量,我尝试了这个方法,但没有任何改变。
使用var_dump检查OPENSSL_CONF的路径为:C:/xampp/apache/bin/openssl.cnf,这是我的计算机上正确的路径。
我检查了php目录的路径(其中包含ssleay32.dll和libeay32.dll),发现它没有定义在我的系统变量中,所以我定义了它,重新启动了我的计算机,在此过程中重启了apache,但错误信息没有改变。
我的xampp版本没有提供php_openssl.dll文件,因此我认为php.ini文档应该将其从可用的.dll列表中排除,正如我检查时所做的那样。我相信xampp编译时使用了基于zend的扩展代替了它。
我能够从xampp gui启动openssl,并成功创建了私钥/公钥对。 phpinfo()报告如下:

openssl OpenSSL支持已启用
OpenSSL库版本 OpenSSL
0.9.8l 5 Nov 2009 OpenSSL头文件版本 OpenSSL 0.9.8l 5 Nov 2009

我在系统目录中发现了来自wamp安装的旧ssleay.dll和libeay32.dll,但我已经删除了它们。(重启后,并重新启动了apache)
我尝试将openssl.cnf复制到默认目录'C:\usr\local\ssl\openssl.cnf',但没有改变。
我还阅读了这个这个线程,但给出的答案虽然相关,但未能提供帮助或不存在。
有人有任何想法吗?我应该检查下一个步骤或者有什么明显的问题我忽略了吗?

有趣的是 OPENSSL_CONFC:/xampp/apache/bin/openssl.cnf,已经配置得很好了。唯一的小问题是 Windows 使用反斜杠而不是正斜杠。 - jww
2个回答

14

当调用openssl_pkey_new()时,您可能需要指定到openssl.cnf文件的路径:

$configArgs = array(
    'config' => '/etc/openssl/openssl.cnf',
    // ...
);
openssl_pkey_new($configArgs);

你可能还需要在$configArgs中指定其他设置,这样函数才能正常工作(最近没有测试过)。另请参阅http://php.net/manual/en/function.openssl-csr-new.php,了解支持的进一步配置参数的说明。


1
好的,我可以试一下。我认为该函数应该根据http://www.php.net/manual/en/openssl.installation.php上指定的路由查找openssl.cnf文件,但也许它没有访问环境变量的权限? - xenador
openssl.cnf 的位置在哪里? - user4951
这取决于您的OpenSSL安装。如果您使用来自具有软件包管理的Linux系统的OpenSSL,则它可能位于/etc/openssl/中,就像示例中一样。您可以找到一个名为$_SERVER['OPENSSL_CONF']的Web服务器环境变量,该变量会提供给您位置信息。 - Arc
1
只有在将$configArgs ['config']显式设置为getenv('OPENSSL_CONF')后,它才对我起作用。看来openssl_pkey_new忽略了环境变量并要求您显式设置配置。 - fernacolo

5
你可以在xampp/apache/conf/extra/http-xampp.conf中检查OPENSSL_CONF变量。
然后使用xampp/apache_start.bat启动apache,而不是使用XAMPP控制面板(从控制面板启动时可能会出现当前目录问题)。
这适用于Win7 64位系统上的XAMPP 1.7.4。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接