调用openssl_pkey_new()时xampp openssl错误;

所以我试图让openssl工作在我的Windows安装的xampp(1.7.3),它是用OpenSSL 0.9.8l构build的。 这是我第二次在安装openSl的时候安装,但是第一次安装了(这是在同一台机器上安装了一个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环境常量的可能性,我试过但没有任何改变。

一个OPENSSL_CONFvar_dump导致path: C:/xampp/apache/bin/openssl.cnf这对我的机器是正确的。

我检查了php目录(ssleay32.dll和libeay32.dll所在的位置)的path是在我的path系统var中定义的,并且不是,所以我定义了它,重新启动了我的机器,并在此过程中重新启动了apache,但是在错误信息中没有改变。

我的版本的xampp没有带有php_openssl.dll,因此我相信php.ini文件应该将它从可用的.dll列表中排除,就像我检查时一样。 我相信xampp是用zend扩展编译的。

我能够从xampp gui启动openssl,并成功创build了私钥/公钥对。

phpinfo()报告:

openssl支持OpenSSL支持
OpenSSL库版本OpenSSL
0.9.8l 2009年11月5日OpenSSL Header版本OpenSSL 0.9.8l 2009年11月5日

有一个旧的ssleay.dll和libeay32.dll从我安装的系统目录中的wamp安装,但是我已经删除了它们。 (重新启动后,并重新启动Apache)

我试着把openssl.cnf复制到默认的目录C:\ usr \ local \ ssl \ openssl.cnf中。

我也读这个线程和这个线程,但给出的答案是相关的,但没有帮助或不存在。

任何人有什么想法,我应该检查下一个或什么明显,我错过了?

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

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

您可能还需要在$configArgs指定其他设置$configArgs使用该功能(最近还没有测试过)。 另见http://php.net/manual/en/function.openssl-csr-new.php,获取更多支持的配置参数的说明&#x3002;

你检查xampp / apache / conf / extra / http-xampp.conf中的OPENSSL_CONF变量

然后启动apache使用xampp / apache_start.bat而不是XAMPP控制面板(奇怪的是,当从控制面板启动它不工作[也许是目前的目录问题])

这是Win7 64bit上的XAMPP 1.7.4